天天看點

Redis:05---鍵的基本指令(下) 生存周期

一、設定鍵生存/過期時間

  • 生存時間(Time To Live,TTL):在經過指定的秒數或者毫秒數之後,伺服器就會自動删除生存時間為0的鍵
  • 過期時間(expire time):是一個UNIX時間戳,當鍵的過期時間來臨時,伺服器就會自動從資料庫中删除這個鍵

設定生存時間

  • EXPIRE <key> <ttl>:用于将鍵key的生存時間設定為ttl秒
  • PEXPIRE <key> <ttl>:用于将鍵key的生存時間設定為ttl毫秒

設定過期時間

  • EXPIREAT <key> <timestamp>:用于将鍵key的過期時間設定為timestamp所指定的秒數時間戳
  • PEXPIREAT <key> <timestamp>:用于将鍵key的過期時間設定為timestamp所指定的毫秒數時間戳
  • EXPIRE、PEXPIRE、EXPIREAT這幾個指令的内部最終使用的都是PEXPIREAT

注意事項

  • ①如果expire的鍵不存在,則指令傳回0。例如:
  • ②如果将過期時間設定為負值,那麼該鍵會被立即删除。例如:
  • ③Redis不支援二級資料結構(例如哈希、清單)内部元素的過期功能,例如可以對清單的key做過期時間,但不能對清單類型的一個元素(value)設定過期時間。例如,下面有一個my_list清單,其含有元素“hello、world、redis”

字元串類型鍵的注意事項

  • 對于字元串類型鍵的注意事項,執行SET指令會去掉過期時間
  • 在Redis源碼中,SET指令的函數setKey()最後執行了removeExpire(db, key)函數去掉了過期時間。
  • 示範案例:

二、查詢鍵的剩餘生存時間

  • TTL指令以秒為機關傳回鍵的剩餘生存時間
  • PTTL指令則以毫秒為機關傳回鍵的剩餘生存時間
  • 指令傳回值:
  • 鍵未過期:ttl傳回鍵的剩餘秒數,pttl傳回鍵的剩餘毫秒數
  • 鍵沒有設定過期時間:傳回-1
  • 鍵不存在:傳回-2

示範案例

三、移除過期時間

  • PERSIST指令可以移除一個鍵的過期時間

示範案例

四、附加SETEX指令

  • SETEX指令可以在設定一個字元串鍵的同時為鍵設定過期時間,其實set+expire的組合,是一個原子操作,并且減少了一次網絡通訊的時間
  • 格式如下:
SETEX key seconds value      

示範案例

  • 下面設定一個鍵名為hello,其過期時間為50秒,鍵值為world

繼續閱讀