缓存击穿

386 阅读2分钟

什么是缓存击穿?

在做数据大屏需求的过程中,对前端提供了几个接口,底层主要涉及到ES的聚合计算,因为每5s中就会被调用一次,尤其是大促期间,各种数据报表对于Leader们来说至关重要,同时对于ES的压力也是蛮大的,因此给每个接口都设定了一定的缓存。流程图如下:

未命名文件 (9).png

但是在使用的过程中,发现一个问题,接口设定的缓存是10s失效,前端每5s请求一次,当缓存失效时,并且同时有很多人在查看这个页面的时候,新的数据还未保存至缓存中,就会有大量的请求打到ES上去,造成ES性能下降,此时缓存是没有起到任何作用。

缓存击穿 (1).png

缓存击穿的根本原因在于:热点数据Key的失效

那如何解决或者优化缓存击穿的问题?

请求只查询缓存,定时任务写缓存

给缓存Key设置足够长的失效时间,或者不设置失效时间,缓存中的数据由后端定时任务定时查询数据然后写入缓存, 所有的客户端请求只查询缓存,有就是有,没有就是没有。

定时任务刷新缓存.png

也有同学说可以结合热点数据,当然也可以,场景是定制化的,什么样的场景有什么样的解决方案,只不过我们的这个场景不需要考虑非热点数据的问题,都是热点数据。奉上热点数据的流程图供大家参考。非热点数据可以加层缓存也可以直接去查询底表数据,看个人需求。

热点数据定时任务缓存 (1).png

设置锁

设置锁的解决方案更新中.......