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

2019-12-09  本文已影响0人  指尖架构141319

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.问题和解决

上一篇 下一篇

猜你喜欢

热点阅读