redis expire超时操作

基本使用:
127.0
.0.1:6379> EXPIRE user 1000 (integer) 1 127.0.0.1:6379> ttl user # 查看剩余超时时间 (integer) 996

超时重置

  有些redis命令会清除key的超时时间,如set,del,getset和所有的*Store命令。即修改redis的值而不是替换的化将不会修改key的超时时间。像incr、hset、lpush不会改变key的超时设置,也可以通过命令pexpire手动清除超时,将key变成持久的key。

     重命名key不会清除key的超时时间。

127.0.0.1:6379> set name hh
OK
127.0.0.1:6379> EXPIRE name 30
(integer) 1
127.0.0.1:6379> ttl name
(integer) 27
127.0.0.1:6379> set name h1 ## set后会清除key的超时时间
OK
127.0.0.1:6379> ttl name
(integer) -1
127.0.0.1:6379> EXPIRE name 20
(integer) 1
127.0.0.1:6379> GETSET name h2
"h1"
127.0.0.1:6379> ttl name
(integer) -1
127.0.0.1:6379> 

  修改命令不会重置超时时间

127.0.0.1:6379> LPUSH namelist hh
(integer) 1
127.0.0.1:6379> EXPIRE namelist 20
(integer) 1
127.0.0.1:6379> ttl namelist
(integer) 18
127.0.0.1:6379> lpush namelist h2
(integer) 2
127.0.0.1:6379> ttl namelist
(integer) 3

  

redis的key如何过期

  redis中key过期有两种,主动过期和被动过期。

  被动过期:当访问一个key时被发现过期。

  主动过期:redis会定期的从自己维护的有expire属性的key集中随机测试一些键的过期时间,过期的键会被删除。

    具体机制为:

    1. 从具有过期属性的key集中随机抽取20个key。
    2. 删除所有过期的key。
    3. 如果过期的key占比超过25%,重复第一步。

在副本和AOF文件中如何处理过期

  redis主节点在key过期时,会生成一个del命令保存到AOF文件或发送到从节点,即从节点自己不会主动过期key,而是接受主服务器的del,但是从节点仍然保存着key的过期信息,以便在主节点挂掉时,从节点在被选为主节点时有能力删除过期的键。

原文地址:https://www.cnblogs.com/hhan/p/10955287.html