介绍:
缓存击穿是指当一个Key的缓存即将过期或者已经过期时,大量的请求同时访问该Key,由于缓存中不存在该Key,所有请求都会去后端数据源获取数据,导致后端数据源压力瞬间增大,甚至崩溃。缓存击穿通常发生在缓存和后端数据源的过期时间相差不大的情况下,因为这样会导致大量的请求同时访问后端数据源.
注:有的朋友不能理解为什么刚好一个缓存过期的时候就很多请求进来,其实是这个数据一直都有很多请求,例如网站的首页,热点数据等等.
解决方案:
1、互斥锁:
存在的问题 : 同一时间的请求有一个在进行更新缓存操作,其他的都在休眠重试,效率很低,反应到业务上就是所有人查询到这一块会卡顿一下.
2、逻辑过期:
这种方式和互斥锁类似,只不过更新数据多开了一个线程,其他的请求发现逻辑时间过期就直接返回旧数据,从业务上来说并不会产生卡顿,只有是数据更新时间慢了一点点,一般情况下用户是感受不到的