Redis中exists、ttl、setex、setnx、set、getset等常用命令


1、exists
     通常情況下用exists來判斷一個key是否存在沒什么問題。但如果過期時間需要精確到秒或十秒級,那么exists就可能錯誤返回。
原因是在redis Key過期之后,但是執行exists命令的返回值可能還為true,這個時候使用TTL命令發現返回值已經小於等於0了。
     ps :  
      redis key 過期的方式有三種:

  •     被動刪除:當讀/寫一個已經過期的key時,會觸發惰性刪除策略(執行exists不會觸發惰性刪除),直接刪除掉這個過期key
  •     主動刪除:由於惰性刪除策略無法保證冷數據被及時刪掉,所以Redis會定期主動淘汰一批已過期的key
  •     當前已用內存超過maxmemory限定時,觸發主動清理策略


2、ttl
    使用TTL key可以訪問key的生存時間。
    時間復雜度:
    O(1)
    返回值:
    當 key 不存在時,返回 -2 。
    當 key 存在但沒有設置剩余生存時間時,返回 -1 。
    否則,以秒為單位,返回 key 的剩余生存時間。

3、set
     set key value
    設置指定 key 的值為 value。
    如果 key 已經存儲其他值, SET 就覆寫舊值,且無視類型。

4、setex
    setex key seconds value
   設置指定 key 的值為 value,並將 key 的過期時間設為 seconds (以秒為單位)。
   如果 key 已經存在, SETEX 命令將會替換舊的值。

5、setnx
    setnx key value
  設置指定 key 的值為 value,只有在 key 不存在時設置 key 的值。
    setnx(SET if Not eXists) 命令在指定的 key 不存在時,為 key 設置指定的值。
   設置成功,返回 1 。 設置失敗,返回 0 。

6、getset
   getset key value
   設置指定 key 的值為 value,並返回 key 的舊值(old value)。
   返回給定 key 的舊值。 當 key 沒有舊值時,即 key 不存在時,返回 nil 。
   當 key 存在但不是字符串類型時,返回一個錯誤。

7、其它
   已經設置生存時間的key,如果想清除掉生存時間,將其變成永久存在的key,可以使用persist命令。
   返回值:

  •     1 if the timeout was removed.
  •     0 if key does not exist or does not have an associated timeout.

以上所有命令時間單位都是秒,如果需要設置、訪問毫秒級別的時間,在所有命令前加p就可以了。

  •     pttl
  •     pexpire
  •     psetex key milliseconds value
  •     set key value [ex seconds] [px milliseconds] [nx|xx]  

        eg.
            set key value px 1000
        可選參數說明:
        從 Redis 2.6.12 版本開始, SET 命令的行為可以通過一系列參數來修改:

  •             EX seconds : 將鍵的過期時間設置為 seconds 秒。 執行 SET key value EX seconds 的效果等同於執行 SETEX key seconds value 。
  •             PX milliseconds : 將鍵的過期時間設置為 milliseconds 毫秒。 執行 SET key value PX milliseconds 的效果等同於執行 PSETEX key milliseconds value 。
  •             NX : 只在鍵不存在時, 才對鍵進行設置操作。 執行 SET key value NX 的效果等同於執行 SETNX key value 。
  •             XX : 只在鍵已經存在時, 才對鍵進行設置操作。

        因此:
        因為 SET 命令可以通過參數來實現 SETNX 、 SETEX 以及 PSETEX 命令的效果, 所以 Redis 將來的版本可能會移除並廢棄 SETNX 、 SETEX 和 PSETEX 這三個命令。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM