redis过期策略

最近在读redis深度历险,记录一下在读书的过程中一些重要的知识点,供以后查阅。

redis过期策略有两种,一种是主动式过期,另一种是被动式过期,redis采用两者相结合的方式来处理,因为单纯采用主动式过期,会影响redis的性能,单纯采用被动式过期,可能会导致大量内存得不到释放。

主动式过期:

    redis会将所有设置了过期时间的key放到一个独立的字典中,以后会定时扫描这个字典,将过期的key删除。redis默认每秒进行10次过期扫描,扫描不会扫描所有的key,而是采用一种贪心的策略来进行:

1. 从过期字典中随机选择20个key。

2. 将20个key中过期的key删除。

3. 如果过期的key的比例超过1/4,redis认为过期的key相对较多,会再次从步骤1依次执行。

同时为了保证扫描不会出现过度循环影响性能,redis会限制每次扫描的时间上限为25ms。

 

被动式过期:

    redis定时扫描任务可能不会将过期的key完全删除,此时redis会用一种懒惰策略来被动式的更新过期的key,即当这个key被实际访问时,redis会检查这个key的过期状态,如果过期,那么将这个key删除。

你可能感兴趣的:(redis)