1、什么操作会影响expire设置的过期时间?
删除过期时间,只有替换了key对应的value,才会清除key对应的过期时间。如SET、DEL、GETSET命令会清除过期时间,而LPUSH,或INCR等命令不会影响过期时间。
使用RENAME key newkey时,key的过期时间会转移到newkey上。
PERSIST 命令可以清除一个key的过期时间。
对一个已经设置过过期时间的key,再次执行EXPIRE 命令,会更新过期时间。
执行 EXPIRE/PEXPIRE 时,如果参数是一个负数或一个过去的时间,那么对应的key会被删除。
2、expire设置的时间是一个绝对时间,及时redis实例停止运行了,当再次重启时,只要此刻的时间已经过期,那么对应的key会立刻被删除。
3、redis如何清除过期的key?
有两种方式,主动清除和被动清除。
被动清除:当key被访问时,redis发现key已经过期,则清除。
主动清除: redis每10s执行一次下面的流程,
1)从存在过期时间的key集合中抽取20个key
2)清除过期的key
3) 如果过期的key超过抽样的25%,则立即执行第一步。
所以,任何时候过期却没有被删除的key最多占总空间的1/4。
4、在AOF文件和replication中,如果处理过期的key?
对于AOF文件,key过期时,就执行一条DEL命令。
对于replication, master会同步一条DEL语句给replication。replication不会主动过期key,但是如果replication被选举升级为master后,则它就可以主动过期key。