redis设置失效时间:(key的过期淘汰机制)
缓存击穿:
1.概念:高并发情况下,某个热门key突然过期,导致大量请求在redis未找到缓存数据,进而全部去访问DB请求数据,引起DB压力瞬间增大。
2.解决方案:缓存击穿的情况下一般不容易造成DB宕机,只是会造成对DB的周期性压力,对于缓存击穿一般有以下解决方案:
(1)redis中的数据不设置过期时间,然后在缓存的对象上添加一个属性标识过期时间,每次获取到数据时,校验对象中的过期时间属性,如果数据即将过期,则异步发起线程主动更新缓存中的数据。但是这种方案可能会导致有些请求会拿到过期的值,就得看业务能否可以接受。
(2)如果要求数据必须是新数据,则最好的方案是设置热点数据永不过期,然后加一个互斥锁保证缓存的单线程写。