【夯实Redis】Redis过期策略与内存淘汰机制有哪些?
目录
一、过期策略
Redis采用 惰性删除策略 + 定期删除策略。
定时删除策略
在为一个key设置过期时间的同时,也为这个key设置一个倒计时的定时器,时间到了以后定时器把Key删除。
优点:有了定时器自动删除过期的Key,那么可以保证内存快速释放。
缺点:有可能创建了太多的定时器,可能会影响Redis性能。CPU全被用于计时与删除Key了。
惰性删除策略
查询某个Key的时候,先看它是否过期,如果过期了,就直接删除这个Key。
优点:CPU占用少,只在用户取这个Key的时候才去删除Key。
缺点:过期的Key删除不及时,可能会占用了大量内存。
定期删除策略
每过100毫秒就随机选择一些设置了过期时间的Key,检查它们是否过期,如果过期的话就删除它们。
优点:可以及时释放无用Key所占内存
缺点:因为是随机的,有可能有些过期的Key一直没有被删除
二、淘汰机制
Redis是基于内存的,且单线程。如果内存达到了最大内存限制,那么就会清除掉无用的Key。
Redis支持的淘汰策略有6种:
对所有Key来说
allkeys-lru :最少使用的Key被删除
allkeys-random:随即删除
对设置了过期的Key来说:
volatile-lru:最少使用的Key被删除
volatile-ttl:快要过期的Key被删除
volatile-random:随机删除
还有一种
no-enviction:Redis默认淘汰机制。不删除任何Key,新写入指令报错。