缓存中的某个 Key 数据即将过期,而这时候又有大量的请求来访问这个缓存数据,那么当这个 Key 的缓存数据过期时,会有大量的请求访问数据库,造成缓存击穿。
解决方案如下:
1、后台刷新,后台定义一个定时任务专门主动更新缓存数据,比如一个缓存中的数据过期时间是 30 分钟,那么定时任务每隔 25 分钟定时刷新数据。
2、检查更新,将缓存过期时间一起保存到缓存中,在每次执行查询操作后,都将查询出来的缓存过期时间与当前系统时间做一个对比,如果在规定的时间内,就更新缓存。
3、分级缓存,采用一级缓存和二级缓存方式,一级缓存失效时间短,二级缓存失效时间长。请求优先从一级缓存获取数据,如果一级缓存未命中则加锁,同时从数据库获取数据并更新缓存,而其他请求从二级中缓存获取数据并返回。
4、加锁,保证只有一个进程查询数据并更新缓存。