# Redis与数据库一致性补充
最近发现还有一种思路,在这里记录一下
# 介绍
之前我们的操作都是这样
- 读取操作先从缓存取数据,没有,则从数据库中取数据,成功后,放到缓存中
- 更新操作就是操作数据库和缓存
现在改成这样
- 读取操作先从缓存取数据,没有,则从数据库中取数据,成功后,不负责回写缓存
- 更新操作就是更新数据库,删除缓存(或删除缓存,更新数据库),发送缓存刷新消息
- 然后有一个独立模块去消费消息,异步完成缓存刷新
还可以采用消费数据库Binlog的方式
- 读取操作先从缓存取数据,没有,则从数据库中取数据,成功后,不负责回写缓存
- 更新操作就是更新数据库,删除缓存(或删除缓存,更新数据库)
- 然后有一个独立模块去消费数据库Binlog,异步完成缓存刷新
# 总结
感觉这样容易让出现读取操作Cache Miss,容易击穿DB,只是记录一下
还有一种方式可以确保DB和Redis中缓存同一时间强一致,使用了锁,性能吞吐量有下降,有兴趣可以看下: 聊聊db和缓存一致性常见的实现方式 (opens new window)