cache 本地&分布式(-redis) & JSON对象转换
本地缓存
最简单的cache, 做一个map就行
private final Map<String,List<User>> cache=new HashMap<>(); @Override public List<User> queryUserList() { List<User> userlist = cache.get("userlist"); if(userlist==null){ List<User> users = userMapper.queryUserList(); cache.put("userlist",users); return users; } return cache.get("userlist"); }
本地缓存在分布式情况下的缺点
1.多加载(浪费空间)
2.数据一致性问题
分布式缓存: 利用redis
RedisTemplate<object,object>
StringRedisTemplate<String,String> (使用)
将需要存的对象转为json存入redis
@Autowired StringRedisTemplate redisTemplate; // private final Map<String,List<User>> cache=new HashMap<>(); @Override public List<User> queryUserList() { String userlist = redisTemplate.opsForValue().get("userlist"); if(userlist==null){ List<User> users = userMapper.queryUserList(); String s = JSON.toJSONString(users); redisTemplate.opsForValue().set("userlist",s); return users; } List<User> users = JSON.parseObject(userlist, new TypeReference<List<User>>() { }); return users; }
redisTemplate.opsForList().leftPushAll(key, skuIds); //从左边依次放整个集合 List<String> skuIds
// 绑定秒杀商品hash 之后要保存什么就直接用 operations去操作就行 BoundHashOperations<String, Object, Object> operations = redisTemplate.boundHashOps("seckill:skus"); if (!operations.hasKey(skuKey)) String jsonString = JSONObject.toJSONString(redisTo); operations.put(skuKey, jsonString); //两个str

浙公网安备 33010602011771号