缓存小技巧--异步更新缓存时remove cache数据

在支撑大规模、高并发、高可用的互联网应用中,异步更新分布式缓存的应用已经越来越多了(为什么是异步更新缓存,因为异步不仅可以提高系统性能,而且提高系统的伸缩性和可用性),由于缓存的更新是异步的,可能由于多个更新缓存的并发线程而导致的脏数据。

 

举例,有下面2个线程A、B同时执行业务,执行完业务之后,会产生2个异步的线程A1、B1去更新缓存,在理想情况下,A1和B1应该保持顺序性,即A1先更新缓存、B1再更新缓存,但是由于线程本身是异步的,加上2个线程可能分布在不同应用服务器上,所以对执行线程时顺序没有办法保证,如果B1先执行,A1再执行,这样B1的数据就被A1覆盖掉,从而导致脏数据。有没有什么好的办法防止这种脏数据呢?


解决办法:线程每次异步执行更新缓存时,不去更新缓存,而是去remove缓存。
这样的好处,不管A1、B1的执行顺序如何,都不可能导致缓存数据被覆盖的现象,因为每次是去remove缓存;
等待下次查询时将数据库中的数据load进缓存中。
缺点:如果更新的频率比较高,则可能会增加数据库的负载,所以事先必须先评估好业务。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值