库存是先删缓存还是先改db

库存是先删缓存还是先改db

先改db再淘汰缓存
  • 缓存失效
  • A读db数据是旧值
  • B改数据并淘汰缓存
  • A写入旧值到缓存中
    此种方案,发生的问题的条件比较苛刻,但也会出现此类问题
先淘汰缓存再改db
  • B淘汰缓存
  • A读取缓存,没值,去读取旧值
  • B修改DB
  • A把旧值写到缓存中
    此种方案,只要有读取事件在B淘汰后修改成功前出现,则会出现严重的脏读问题,需要一直等到缓存失效才会解决问题
延迟双删

对于此问题,我们常用解决方案是延迟双删

  • 先删除缓存
  • 修改db
  • 休眠x ms再淘汰缓存
    休眠x的目的是为了在修改db时,让出现的读事件写缓存的过程执行完.
    为了防止淘汰缓存失败,还需要增加重试机制(mq实现)
    为了增加吞吐量,可以把休眠ms放在协程中实现
    读写分离主从情况下,休眠时间可以延长一点
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容