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

 

posted @ 2022-07-07 21:12  磕伴  阅读(177)  评论(0)    收藏  举报