一、Redis过期策略有哪些?
Redis有三种过期策略,分别为:
- 定时过期:指每个设置过期时间的key都会创建一个定时器,等到过期时间就会清除该key(可以节省内存,但会占用大量cpu资源,影响缓存的响应时间和吞吐量)
- 惰性过期:指每个设置过期时间的key不会自动过期,而是等到被动访问该key时才会判断是否过期来决定是否清除该key(可以节省cpu资源,但是会导致大量没被访问的过期key没被清除,从而占用大量内存)
- 定期过期:指redis会周期性地随机抽取一些设置了过期时间的key,通过判断来决定是否清除该key
Redis默认同时开启惰性过期和定期过期这两种过期策略,以求在合理使用cpu和避免内存浪费之间取得平衡
二、Redis是怎样进行定期删除的?
默认每个100ms扫描一次,每次随机抽取20个key
定期删除的过期策略的流程为:
- 每100ms随机抽取20个key
- 检查这20个key是否过期,删除过期的key
- 检查过期数据占比,如果
过期数
/抽取数
大于25%,则重复步骤1,反之则停止删除,等下一轮扫描