redis过期key的处理
在使用Redis的时候,可以设置key的过期时间,但是当key到达过期时间时,是否会被redis立即删除?答案是no。这里就涉及redis key的过期策略:定时删除和惰性删除
定期删除
隔一段时间,随机抽取一些设置过期时间的key,检查其是否过期,如果过期就删除
惰性删除
当客户访问数据时,如果过期就会删除
Redis同时使用定期删除和惰性删除两种策略,可以在很好的使用的cpu时间和避免浪费内存之间取得平衡,但是同时也存在一个问题,当定期删除和惰性删除无法有效的删除key时,会造成内存的巨大浪费,这就又涉及到了内存淘汰机制。
内存淘汰机制
常用的内存淘汰策略:
• volatile-lru:最近最少使用算法,从设置过期时间的数据中将空转时间最长的key删掉
• volatile-lfu:最近最不经常使用算法,从设置过期时间的数据中将某段时间之内使用频次最低的key删掉
• volatile-ttl:从设置过期时间的数据中选择过期时间最早的key删掉
• volatile-random:从设置过期时间的数据中随机删除
• allkeys-lru: 从所有的数据中将空转时间最长的key删掉
• allkeys-lfu:从所有的数据中将某段时间之内使用频次最低的key删掉
• allkeys-random:从所有的数据中随机删除
• noeviction:不做任何处理,客户访问就删除