缓存一致性问题

根据业务场景做选择吧,我目前了解的就五种做法

如果要是强一致性的话,那就是加分布式锁,但你引入锁了,性能就很低。这就很矛盾,毕竟你引入缓存是来提升性能的

无锁只能尽可能地保证一样,AP模式

同步双写

进行操作更新时,同时操作mysql or redis 。业务用得最多的方案了,适合单机。

mq异步多写

适合多机redis

定时任务

  • db做逻辑删除和updateTime处理
  • db做而是让定时任务扫描最近变动的数据,然后批量删除key

效率高,但时延时最高的

闪电缓存

  • 缓存过期时间设置很短
  • 只更新db,让缓存自己过期

时延性也还好,看你缓存过期时间的设置,

不过就是给数据库增加了压力

bin log监听

  • 用flink-cdc or canal(阿里已经停止维护了)监听mysql的bin log
  • 解析bin log

好处就是时延低,坏处就是成本高

旁路缓存+延迟双删

删完后,隔一段时间再删一次,但间隔时间很难确定

只存在理论

  1. 啥时候删,这东西很难确定
  2. 高并发不管用,你把缓存删了,然后你让数据库抗高并发