美文网首页
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