我们有时候会遇到这样的事情,当想redis写入一些数据后,再次查询发现数据不见了,这是怎么回事呢?数据明明过期了,怎么还占用着内存?
我们知道redis 主要是基于内存来进行高性能、高并发的读写操作的。然而内存是有限的,比如 redis 就只能用 10G,你要是往里面写了 20G 的数据,会咋办?当然会干掉 10G 的数据,然后就保留 10G 的数据了。那干掉哪些数据?保留哪些数据?这就要根据设置的redis的淘汰机制来选择了。
数据明明过期了,竟然还占用这内存,这些都是由 redis 的过期策略来决定。
1、redis 的过期策略
redis的过期策略包括两种,分别是定期删除和惰性删除:
定期删除:指的是 redis 默认是每隔 100ms 就随机抽取一些设置了过期时间的 key,检查其是否过期,如果过期就删除。(不能完全删除)
惰性删除:直接查询数据的时候,redis会先查看一些这个数据是否已经过期,如果过期,就进行删除。(不能完全删除数据)
定期删除和惰性删除都存在着一些问题,如果定期删除漏掉了很多过期 key,然后你也没及时去查,也就没走惰性删除ÿ