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
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术