老师,如果用这个本地缓存的话,那怎么保证一致性呢

来源:5-8 本地数据热点缓存(下)

qq_福森_0

2020-03-05

如题

写回答

2回答

weixin_慕桂英2091354

2020-03-18

efreshAfterWrite(long, TimeUnit) -> 机制是并非超时时间到就自动刷新,而是请求 get的时候才会触发refresh,默认refresh是同步请求新值,可以重写refresh方法改成异步。如果有大量并发请求的时候,只会有一个请求get->reload同步执行,其他线程返回旧值.

弊端
吞吐量低的应用,在超过过期时间时,大量并发get请求时,大部分拿到的是很久前的旧值,导致数据脏读。

如何解决?
可以同时使用expireAfterWrite设置key过期时间,比如每2s刷新一次新值,设置expireAfterWrite为5s为过期时间,则当key值5s没有访问的话,则第5s的时候强制取load新值,解决了脏读问题,也同时避免了缓存穿透问题。


0
0

龙虾三少

2020-03-05

没办法保证强一致

0
2
龙虾三少
回复
qq_福森_0
本地是没有办法保证一致性的,因为我们用的是多机部署,所以不会用本地库存缓存的方案
2020-08-04
共2条回复

聚焦Java性能优化 打造亿级流量秒杀系统(赠秒杀项目)

理解高流量电商网站性能构建思路 用高逼格技术解决性能提升问题

2174 学习 · 1009 问题

查看课程