基本使用:
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集中隨機測試一些鍵的過期時間,過期的鍵會被刪除。
具體機制為:
-
- 從具有過期屬性的key集中隨機抽取20個key。
- 刪除所有過期的key。
- 如果過期的key占比超過25%,重復第一步。
在副本和AOF文件中如何處理過期
redis主節點在key過期時,會生成一個del命令保存到AOF文件或發送到從節點,即從節點自己不會主動過期key,而是接受主服務器的del,但是從節點仍然保存着key的過期信息,以便在主節點掛掉時,從節點在被選為主節點時有能力刪除過期的鍵。