Try Everything Different In My Life.

「🔨实践」缓存(Redis)一致性解决方案

2019.04.02

在使用缓存的过程中,因为数据库和缓存的数据不一致导致数据不对,这样的现象叫做缓存不一致

原因

造成缓存和数据库不一致的情况大概分为以下

  • 数据库更新成功,缓存更新失败
  • 数据库更新失败,缓存被删除了

解决方案

同步更新

思想

缓存和数据库更新都在一个事务中,保证强一致性

异步更新

思想

数据库更新成功后,异步执行缓存更新的操作(可以通过多线程,消息队列)

缓存失效

思想

给key加上过期时间,过期了没有缓存然后再去更新下缓存

定时更新

开启定时任务,执行缓存更新的操作

总结

方案 实现方式 优点 缺点 适用场景
同步更新 使用事务 强一致性 影响主业务 实时性要求高的场景:银行业务证券业务
异步更新 异步线程消息队列 业务解耦 有较短时延需要手段保证最终一致性(消息补偿机制) 不适合写操作频繁,数据一致性要求高的场景
缓存失效 依赖Redis的key过期时间 实现简单 有一定延迟缓存穿透缓存雪崩 适合读多写少的场景,能接受时延
定时任务 定时任务 不影响业务 一致性难以保证代码复杂时延大 对于时延要求很低的场景