美文网首页
2.分布式缓存(一致性)

2.分布式缓存(一致性)

作者: 指尖架构141319 | 来源:发表于2019-12-09 17:58 被阅读0次

    1.概述

    读取缓存步骤一般没有什么问题,但是一旦涉及到数据更新:数据库和缓存更新,就容易出现缓存(Redis)和数据库(MySQL)间的数据一致性问题。

    • 案例:

    同时有一个请求 A 进行更新操作,一个请求 B 进行查询操作。可能出现:
    (1)请求 A 进行写操作(key = 1value = 2),先删除缓存 key = 1value = 1
    (2)请求 B 查询发现缓存不存在
    (3)请求 B 去数据库查询得到旧值 key = 1 value = 1
    (4)请求 B 将旧值写入缓存 key = 1 value = 1
    (5)请求 A 将新值写入数据库 key = 1 value = 2
    问题:缓存中数据永远都是脏数据
    解决(双删策略):先删除缓存,再更新数据库,再删缓存(双删,第二次删可异步延时)

    • 代码实现
    public Provinces update(Provinces entity) {
            redisTemplate.delete(entity.getProvinceid());//直接删除缓存,预防数据库成功,缓存失败
            super.update(entity);
            redisTemplate.delete(entity.getProvinceid());//双删
            return entity;
        }
    

    2.问题和解决

    • 缓存过期与一致性问题


      image.png
    • 解决方案对比


      image.png

    相关文章

      网友评论

          本文标题:2.分布式缓存(一致性)

          本文链接:https://www.haomeiwen.com/subject/bcligctx.html