- 最近在学习redis的相关知识, 学习到了redis和mysql的数据一致性问题
保证mysql和数据库的双写一致性的时候, 通常有如下两种策略
- 先删缓存再写mysql
- 先更新mysql再删缓存
- 并且
先更新缓存再更新mysql
的策略是不太被推荐的, 但是如果场景是例如发红包的时候, 那么生成红包和抢红包这个事情一般都是在redis中先完成, 然后再同步到mysql中(使用mq辅助), 那么这个好像就是先更新缓存再更新mysql
的策略
所以想问一下, 是否在实际的开发过程中, 需要将先更新缓存再更新mysql
和先更新mysql再删缓存
两种策略结合起来
- 针对于发红包的整体流程也就是 : redis修改 -> mq到mysql写入数据库 -> canal又监听到mysql的修改 -> mq到redis来删除缓存更新数据
维护缓存一致性的最佳实践是
先更新mysql再删缓存
+TTL cache
。前者使得出现不一致的窗口最小,后者可以保证最终一致性。