Redis使用 “主动更新” + “超时剔除” 缓存策略案例

缓存策略:主动更新 + 超时剔除

设计思想:Redis使用 “主动更新” + “超时剔除” 缓存策略案例



代码实现:


    /**
     * 查询所有用户
     *
     * @return ResponseEntity<Object>
     */

    @Override
    public ResponseEntity<Object> listUser() {

        // 从redis中根据key查询用户列表信息
        String userListString = (String) redisTemplate.opsForValue().get(USER_LIST);

        // 如果用户信息不为空 转化为List
        if (userListString != null) {
            List<Issa> issaList = JSONUtil.toList(userListString, Issa.class);
            return ResponseEntity.ok(issaList);
        }

        // 查询所有用户信息
        List<Issa> issas = userMapper.selectAll();

        // 判断是否为空
        if (StrUtil.isEmptyIfStr(issas)) {
            return ResponseEntity.status(405).body("没有任何一个用户的信息");
        }

        // 转化为字符串
        String issasStr = JSONUtil.toJsonStr(issas);

        // 保存到redis中,并设置超时时间作为兜底方案
        redisTemplate.opsForValue().set(USER_LIST, issasStr, 60, TimeUnit.SECONDS);

        // ok
        return ResponseEntity.ok(issas);

    }
    /**
     * 注册
     *
     * @param issa 注册的参数
     * @return ResponseEntity<Object>
     */

    @Override
    public ResponseEntity<Object> register(Issa issa) {

        int user = userMapper.insertUser(issa);

        // 判断注册成功与否
        if (user != 1) {
            return ResponseEntity.status(400).body("注册失败");
        }
 
        // 删除缓存
        redisTemplate.delete(USER_LIST);

        return ResponseEntity.ok("注册成功");
    }

超时剔除:

向redis中添加缓存数据的时候设置TTL时间,到期后自动删除缓存,下次查询时更新缓存。这种机制维护成本不是很高,数据一致性同样无法做到很高的保证,因为设置之后数据的有效期就固定了,但是更新时间不固定,若数据在超时剔除之前发生更新然后查询,得到的则仍是更新之前的数据。


主动更新:

使用代码在修改数据库的同时更新缓存。这种策略能够保证很高的数据一致性,但是伴随而来的就是更高的维护成本,要在每一个更改语句后面加上redis缓存更新。




原文始发于微信公众号(步尔斯特):Redis使用 “主动更新” + “超时剔除” 缓存策略案例

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/47890.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!