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

本文探讨了在高并发场景下异步更新分布式缓存可能导致的脏数据问题,并提出了一种通过移除缓存而非更新的方式来避免数据覆盖的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

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


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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值