缓存数据库双写一致性
缓存以 Redis 为例
先写库,后写 Redis
每次写库操作都会更新 Redis,性能压力大,不如在读的时候更新 Redis
先写库,后删 Redis
问题:写库成功,删 Redis 失败,读数据的时候读到缓存
补偿措施:删失败的 key 放到消息队列,发送给 Redis,或直接订阅数据库的写操作日志
先写 Redis,后写库
同”先写库,后写 Redis“,对 Redis 压力过大
先删 Redis, 后写库
问题:
- 线程1删除 Redis,准备写库
- 线程2读取,发现 Redis 为空,读库后更新 Redis
- 线程1完成写库,库与 Redis 数据不一致
补偿措施:延时双删,删 Redis 过一段时候后,再删一次 Redis