Redis中所有的键都可以设置过期策略,就像是所有的键都可以上"生死簿",上了生死簿的键到时间后阎王就会叉掉这个键。同一时间大量的键过期,阎王就会忙不过来。同时因为Redis是单线程的,导致阎王的处理时间会变得很长,而且处理繁忙,Redis就会出现卡顿现象。
Redis有三种策略删除过期Key
expire key seconds # 过期时间为秒数,key不存在时返回(integer) 0,key存在的时返回(integer) 1
pexpire key milliseconds # 同expire,设置的过期时间为毫秒数
setex key seconds value # 只能设置字符串的过期时间
ttl key # 查看Key的过期时间(秒数),用不过期返回(integer) -1,Key不存在返回(integer) -2
pttl key # 同ttl,返回毫秒数
Redis的每个设置了过期时间的Key都会放在一个独立的字典中,用于遍历删除。
Key在被操作时,Redis主动检查Key是否过期,过期则删除,返回nil
Redis会周期性的随机扫描一批设置了过期时间的Key并进行处理,Redis每秒进行10次过期扫描会做的操作有:
hz 10
Redis除了设置每秒10次的扫描频率之外,还设置了每次扫描不会超过25ms的上限,以防出现过度循环扫描,导致线程卡死。
# maxmemory <bytes>
当已用的内存超过maxmemory 配置的内存时,会触发主动清除策略
# maxmemory-policy noeviction
被动删除+主动删除
本人深知水平有限,欢迎指正本文错误之处。
原文:https://www.cnblogs.com/imeng/p/11353207.html