Redis过期策略和内存淘汰机制
1、Redis数据为什么会过期
首先,要明白redis是用来做数据缓存的,不是用来做数据存储的(当然也可以当数据库用)。
数据过期主要是有两种情况:
(1)在设置缓存数据时制定了过期时间,这样到了过期时间数据就不见了。
(2)redis的数据是存放在内存中的,而内存是有限的,是不可能放过多数据的,比如只有10G的内存,想要向里面放入12G的数据, 那么就注定会有2G的数据会丢失。
2、redis的过期策略
redis 的过期策略是:定期删除 + 惰性删除
(1)定期删除
定期删除指的是redis默认每隔100ms就随机抽取一些设置了过期时间的key,检测这些key是否过期,如果过期了就将其删掉。
【问题】为什么会选择一部分,而不是全部:
因为如果这是redis里面有大量的key都设置了过期时间,那么如果全部去检测一遍,CPU负载就会很高,会浪费大量的时间在检测上面,甚至直接导致redis挂掉。所有只会抽取一部分而不会全部检查。
【出现的问题】
这样的话就会出现大量的已经过期的key并没有被删除,这就是 为什么有时候大量的key明明