redis缓存更新策略

redis中缓存一般存在三种更新策略:内存淘汰,超时剔除,主动更新。它们照片那个各有优缺点。

 其中主动更新最为复杂。它又有三种策略:

 Cache Aside :同时更新缓存和数据库;

 Read/Write Through:先更新缓存,缓存负责同步更新数据库;

 Write Behind Caching:先更新缓存,缓存定时异步更新数据库。这三种模式各有优劣,可以根据业务场景选择使用。

        第一种是通过调用者手动添加代码调用,第二种只需调用,其内部自动完成更新维护,但是成本较高。第三种只操作缓存,由其他线程异步更新缓存,效率较高。但是成本高,难以保证缓存的一致性。基于上述原因,常见使用的方案是第一种(Cache Aside Pattern)。

       

         操作缓存数据库是有三种问题需要考虑

 对于缓存和数据库先操作哪个的问题,由于线程问题。

        若先删除缓存,再更新数据库。当一个线程删除了缓存,还未更新数据库时,有另一个线程进来访问缓存发现不存在,此时去数据库进行查询,而数据库还未及时更新,所以查询的数据是旧数据。就发生了数据缓存不一致的问题,出现脏读现象。 

        若先更新数据库,再删除缓存。缓存刚好到期失效时,读请求从数据库中读取数据,写请求更新完数据后再失效缓存后,读请求将旧数据存入到缓存中,这种情况也会导致脏数据的问题。实际上这种情况发生的概率很低,要发生这种情况的前提条件是写数据库要先于读数据库完成,一般而言读数据库相比于写数据库要耗时更短,这种前提条件成立的概率很低。且针对这种情况,一般可以采用异步双删策略以及过期失效的方式来避免。

所以在实际开发中,一般选择先更新数据库,再删除缓存的策略。

        总结:

 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值