目录
读场景
写场景
延时双删
先删除 Redis 中的数据,还是先修改数据库
先删除 Redis,再修改数据库
先修改数据库,再删除 Redis
为什么要两次删除 Redis 中的数据
为什么要延时一段时间
需要保证强一致性
分布式锁
共享锁与排他锁
可以有一定的延时
使用 MQ 中间件
使用 Canal 中间件
对于这个问题,分为读场景和写场景。
读场景
客户端发送请求后,会先从 Redis 中获取信息,若获取到,就直接返回;若没有获取到,就会查询数据库,并将查询到的数据写回 Redis 中,从而保证数据库与 Redis 的数据一致性。
写场景
对于写场景,由于数据库中的数据发生了改变,需要将 Redis 中的数据也同步进行改变,这就涉及到了数据的一致性问题。
延时双删
先删除 Redis 中的数据,再修改数据库中的数据,延迟一段时间后再次删除 Redis 中的数据。
对于延时双删,有下面几个问题:
先删除 Redis 中的数据,还是先修改数据库
在下面的情景中,Redis 与数据库中存储的数据均为 10。
先删除 Redis,再修改数据库
第一种情况:
现有两个线程,线程1 先将缓存删除,再将数据库中的数据更新为 20。这时线程2 查询数据,由于此时数据库中的数据还未同步至 Redis 中,那么线程2 在 Redis 中查询不到数据,就会从数据库中查询到 20,并将 20 写回 Redis 中。此时 Redis 与数据库中的数据是一致的。
第二种情况: