提起redis,毫无疑问,缓存是Redis当今最为人熟知的使用场景。再提升服务器性能方面非常有效。但是,redis不是万金油,它也有自身的弊端,我们在使用redis缓存功能是也会出现一些问题,比如说:
缓存穿透:也就是说查询数据库中一定没用的数据,redis当中肯定也没有,这样的话,每次请求都会发送到数据库中,增加数据库的负担。
解决方案:
- 将每次查不出来的数据当成null存入redis中,这样查询之后直接返回null,但是这种方法不推荐使用
- 布隆过滤器,这里不多做介绍,上篇已经解释过,有兴趣可以去看看
缓存雪崩:缓存在某一时间段大面积失效
解决方案:设置缓存过期时间,缓存时间相同的,失效的时间也是相同的;缓存多个key时,把时间错开。
redis的缓存过期策略
redis的内存回收机制主要围绕两个方面:
1.Redis过期策略:删除过期时间的key值
2.Redis淘汰策略:内存使用到达maxmemory上限时触发内存淘汰数据
redis的过期策略主要有三种:
- 定时过期
每个设置过期时间的key都需要创建一个定时器,到过期时间就会立即清除。该策略可以立即清除过期的数据,对内存很友好;但是会占用大量的CPU资源去处理过期的数据,从而影响缓存的响应时间和吞吐量。 - 惰性过期
只有当访问一个key时,