Redis命令手冊

来源:https://www.cnblogs.com/luyuze95/archive/2022/08/10/16573755.html
-Advertisement-
Play Games

Redis命令手冊 字元串 SET SET key value [EX seconds] [PX milliseconds] [NX|XX] 將字元串值value關聯到key。 如果key已經持有其他值,set就覆寫舊值,無視類型。 當set命令對一個帶有生存時間(TTL)的鍵進行設置之後,該鍵原有 ...


Redis命令手冊

目錄

字元串


SET

  • SET key value [EX seconds] [PX milliseconds] [NX|XX]
  • 將字元串值value關聯到key。
  • 如果key已經持有其他值,set就覆寫舊值,無視類型。
  • 當set命令對一個帶有生存時間(TTL)的鍵進行設置之後,該鍵原有的TTL將被清除
  • NX:只在鍵不存在時,才對鍵進行設置操作,等同於setnx。
  • XX:只在鍵已經存在時,才對鍵進行設置操作。

SETNX

  • SETNX key value
  • 只在鍵key不存在的情況下,將鍵key的值設置為value。
  • 若鍵key已經存在,則setnx命令不做任何動作。
  • setnx是set if not exist的簡寫。
  • 命令在設置成功時返回1,設置失敗時返回0。

SETEX

  • SETEX key seconds value
  • 將鍵key的值設置為value,並將鍵key的生存時間設置為seconds秒鐘。
  • 如果鍵key已經存在,那麼setex命令將覆蓋已有的值。
  • 等同於set key value, expire key seconds兩個命令的組合,不同的是setex是一個原子操作
  • 命令在設置成功時返回OK,當seconds參數不合法時,命令將返回一個錯誤。

PSETEX

  • PSETEX key milliseconds value
  • 這個命令和setex命令相似,但它以毫秒為單位設置key的過期時間。
  • 命令在設置成功時返回OK。

GET

  • GET key
  • 返回與鍵key相關聯的字元串值。
  • 如果key不存在,那麼返回特殊值nil;否則返回key的值。
  • 如果key的值並非字元串類型,那麼返回一個錯誤,因為get命令只能用於字元串值。

GETSET

  • GETSET key value
  • 將key的值設為value,並返回key在被設置之前的舊值。
  • 返回給定key的舊值。
  • 如果key沒有舊值,那麼返回nil。
  • 當key存在但不是字元串類型時,命令返回一個錯誤。

STRLEN

  • STRLEN key
  • 返回key儲存的字元串值的長度。
  • 當key不存在時,命令返回0。
  • 當key儲存的不是字元串值時,返回一個錯誤。

APPEND

  • APPEND key value
  • 如果key已經存在並且它的值是一個字元串,append命令將把value追加到key現有值的末尾。
  • 如果key不存在,append就簡單地將key的值設為value,等同於set key value命令。
  • 返回追加value之後,鍵key的值的長度。

SETRANGE

  • SETRANGE key offset value
  • 從偏移量offset開始,用value參數覆寫鍵key儲存的字元串值。
  • 不存在的鍵key當作空白字元串處理。
  • setrange命令會確保字元串足夠長以便將value設置到指定的偏移量上,如果鍵key原來儲存的字元串長度比偏移量小,那麼原字元和偏移量之間的空白將用零位元組(zerobytes,"\x00")進行填充。
  • redis字元串大小最多512M,所以用戶能夠使用的最大偏移量為2^29-1。

GETRANGE

  • GETRANGE key start end
  • 返回鍵key儲存的字元串值的指定部分,字元串的截取範圍由start和end兩個偏移量決定,包括start和end在內。
  • 負數偏移量表示從字元串的末尾開始計數,-1表示最後一個字元,-2表示倒數第二個字元,以此類推。
  • getrange通過保證子字元串的值域不超過實際字元串的值域來處理超出範圍的值域請求。

INCR

  • INCR key
  • 為鍵key儲存的數字值加上一。
  • 如果鍵key不存在,那麼它的值會先被初始化為0,然後再執行INCR命令。
  • 如果鍵key儲存的值不能被解釋為數字,那麼INCR命令將返回一個錯誤。
  • 本操作的值限制在64位有符號數字表示之內。
  • INCR命令會返回鍵key在執行加一操作之後的值。

INCRBY

  • INCRBY key increment
  • 為鍵key儲存的數字值加上增量increment。
  • 如果鍵key不存在,那麼鍵key的值會先被初始化為0,然後再執行INCRBY命令。
  • 如果鍵key儲存的值不能被解釋為數字,那麼INCRBY命令將返回一個錯誤。
  • 本操作的值限制在64位有符號數字表示之內。
  • 返回加上增量increment之後,鍵key當前的值。

INCRBYFLOAT

  • INCRBYFLOAT key increment
  • 為鍵key儲存的值加上浮點數增量increment。
  • 如果鍵key不存在,那麼INCRBYFLOAT會先將鍵key的值設為0,然後再執行加法操作。
  • 如果命令執行成功,那麼鍵key的值會被更新為執行加法計算之後的新值,並且新值會以字元串的形式返回給調用者。
  • 無論加法計算所得的浮點數的實際精度有多長,INCRBYFLOAT命令的計算結果最多只保留小數點的後十七位。
  • 當以下任意一個條件發生時,命令返回一個錯誤:
    • 鍵key的值不是字元串類型。
    • 鍵key當前的值或者給定的增量increment不能被解釋為雙精度浮點數。

DECR

  • DECR key
  • 為鍵key儲存的數字值減去一。
  • 如果鍵key不存在,那麼鍵key的值會先被初始化為0,然後再執行DECR操作。
  • 如果鍵key儲存的值不能被解釋為數字,那麼DECR命令將返回一個錯誤。
  • 本操作的值限制在64位有符號數字表示之內。
  • DECR命令會返回鍵key在執行減一操作之後的值。

DECRBY

  • DECRBY key decrement
  • 將鍵key儲存的整數值減去減量decrement。
  • 如果鍵key不存在,那麼鍵key的值會先被初始化為0,然後再執行DECRBY命令。
  • 如果鍵key儲存的值不能被解釋為數字,那麼DECRBY命令將返回一個錯誤。
  • 本操作的值限制在64位有符號數字表示之內。
  • DECRBY命令會返回鍵在執行減法操作之後的值。

MSET

  • MSET key value [key value …]
  • 同時為多個鍵設置值。
  • 如果某個給定鍵已經存在,那麼MSET將使用新值去覆蓋舊值,如果這不是你所希望的效果,請考慮使用MSETNX。
  • MSET是一個原子性操作,所有給定鍵都會在同一時間內被設置,不會出現某些鍵被設置了但是另一些鍵沒有被設置的情況。
  • MSET命令總是返回OK。

MSETNX

  • MSETNX key value [key value …]
  • 當且僅當所有給定鍵都不存在時,為所有給定鍵設置值。
  • 即使只有一個給定鍵已經存在,MSETNX命令也會拒絕執行對所有鍵的設置操作。
  • MSETNX是一個原子性操作,所有給定鍵要麼全部都被設置,要麼就全部都不設置,不可能出現第三種狀態。
  • 當所有給定鍵都設置成功時,命令返回1;否則返回0。

MGET

  • MGET key [key …]
  • 返回給定的一個或多個字元串鍵的值。
  • 如果給定的字元串鍵裡面,有某個鍵不存在,那麼這個鍵的值將以特殊值nil表示。
  • MGET命令將返回一個列表,列表中包括了所有給定鍵的值。

哈希表


HSET

  • HSET hash field value
  • 將哈希表hash中域field的值設置為value。
  • 如果給定的哈希表並不存在,那麼一個新的哈希表將被創建並執行HSET操作。
  • 如果域field已經存在於哈希表中,那麼它的舊值將被新值value覆蓋。
  • 當HSET命令在哈希表中新創建field域併成功為它設置值時,命令返回1;如果域field已經存在於哈希表,並且HSET命令成功使用新值覆蓋了它的舊值,那麼命令返回0。

HSETNX

  • HSETNX hash field value
  • 當且僅當域field尚未存在於哈希表的情況下,將它的值設置為value。
  • 如果給定域已經存在於哈希表當中,那麼命令將放棄執行設置操作。
  • 如果哈希表hash不存在,那麼一個新的哈希表將被創建並執行HSETNX命令。
  • HSETNX命令在設置成功時返回1,在給定域已經存在而放棄執行設置操作時返回0。

HGET

  • HGET hash field
  • 返回哈希表中給定域的值。
  • 如果給定域不存在域哈希表中,又或者給定的哈希表並不存在,那麼命令返回nil。

HEXISTS

  • HEXISTS hash field
  • 檢查給定域field是否存在於哈希表hash當中。
  • HEXISTS命令在給定域存在時返回1,在給定域不存在時返回0。

HDEL

  • HDEL key field [field …]
  • 刪除哈希表key中的一個或多個指定域,不存在的域將被忽略。
  • 返回被成功移除的域的數量,不包括被忽略的域。

HLEN

  • HLEN key
  • 返回哈希表key中域的數量。
  • 當key不存在時,返回0。

HSTRLEN

  • HSTRLEN key field
  • 返回哈希表key中,與給定域field相關聯的值的字元串長度。
  • 如果給定的鍵或者域不存在,那麼命令返回0。

HINCRBY

  • HINCRBY key field increment
  • 為哈希表key中的域field的值加上增量increment。
  • 增量也可以為負數,相當於給給定域進行減法操作。
  • 如果key不存在,一個新的哈希表被創建並執行HINCRBY命令。
  • 如果field不存在,那麼在執行命令前,域的值被初始化為0。
  • 對一個儲存字元串值的域field執行HINCRBY命令將造成一個錯誤。
  • 本操作的值被限制在64位有符號數字表示之內。
  • 返回執行HINCRBY命令之後,哈希表key中域field的值。

HINCRBYFLOAT

  • HINCRBYFLOAT key field increment
  • 為哈希表key中的域field加上浮點數增量increment。
  • 如果哈希表中沒有域field,那麼HINCRBYFLOAT會先將域field的值設為0,然後再執行加法操作。
  • 如果鍵key不存在,那麼HINCRBYFLOAT會先創建一個哈希表,再創建域field,最後再執行加法操作。
  • 當以下任意一個條件發生時,返回一個錯誤:
    • 域field的值不是字元串類型。
    • 域field當前的值或給定的增量increment不能解釋為雙精度浮點數。
  • 返回執行加法操作之後field域的值。

HMSET

  • HMSET key field value [field value …]
  • 同時將多個field-value對設置到哈希表key中。
  • 此命令會覆蓋哈希表中已存在的域。
  • 如果key不存在,一個空哈希表被創建並執行HMSET操作。
  • 如果命令執行成功,返回OK。
  • 當key不是哈希表類型時,返回一個錯誤。

HMGET

  • HMGET key field [field …]
  • 返回哈希表key中,一個或多個給定域的值。
  • 如果給定的域不存在於哈希表,那麼返回一個nil值。
  • 因為不存在的key被當作一個空哈希表來處理,所以對一個不存在的key進行HMGET操作將返回一個只帶有nil的表。
  • 返回一個包含多個給定域的關聯值的表,表值的排列順序和給定域參數的請求順序一樣。

HKEYS

  • HKEYS key
  • 返回哈希表key中的所有域field的表。
  • 當key不存在時,返回一個空表。

HVALS

  • HVALS key
  • 返回哈希表key中所有值的表。
  • 當key不存在時,返回一個空表。

HGETALL

  • HGETALL key
  • 返回哈希表key中,所有的域和值的表。
  • 在返回值里,緊跟每個功能變數名稱field之後是域的值value,所以返回值的長度是哈希表大小的兩倍。
  • 若key不存在,返回空列表。

列表


LPUSH

  • LPUSH key value [value …]
  • 將一個或多個值value插入到列表key的表頭
  • 如果有多個value值,那麼各個value值按從左到右的順序依次插入到表頭。
  • 如果key不存在,一個空列表會被創建並執行LPUSH操作。
  • 當key存在但不是列表類型時,返回一個錯誤。
  • 返回執行LPUSH命令後,列表的長度。

LPUSHX

  • LPUSHX key value
  • 將值value插入到列表key的表頭,當且僅當key存在並且是一個列表。
  • 當key不存在時,LPUSHX命令什麼也不做。
  • 返回LPUSHX命令執行之後,表的長度。

RPUSH

  • RPUSH key value [value …]
  • 將一個或多個值value插入到列表key的表尾。
  • 如果有多個value值,那麼各個value值按從左到右的順序依次插入到表尾。
  • 如果key不存在,一個空列表會被創建並執行RPUSH操作。
  • 當key存在但不是列表類型時,返回一個錯誤。
  • 返回執行RPUSH操作後,表的長度。

RPUSHX

  • RPUSHX key value
  • 將值value插入到列表key的表尾,當且僅當key存在並且是一個列表。
  • 當key不存在時,RPUSHX命令什麼都不做。
  • 返回RPUSHX命令執行之後,表的長度。

LPOP

  • LPOP key
  • 移除並返回列表key的頭元素。
  • 當key不存在時,返回nil。

RPOP

  • RPOP key
  • 移除並返回列表key的尾元素。
  • 當key不存在時,返回nil。

RPOPLPUSH

  • RPOPLPUSH source destination
  • 命令RPOPLPUSH在一個原子時間內,執行以下兩個動作:
    • 將列表source中的尾元素彈出,並返回給客戶端。
    • 將source彈出的元素插入到列表destination,作為destination列表的頭元素。
  • 如果source不存在,值nil被返回,並且不執行其他動作。
  • 如果source和destination相同,則列表中的表尾元素被移動到表頭,並返回該元素,可以把這種特殊情況視作列表的旋轉操作。

LREM

  • LREM key count value
  • 根據參數count的值,移除列表中與參數value相等的元素。
  • count的值可以是以下幾種:
    • count > 0:從表頭開始向表尾搜索,移除與value相等的元素,數量為count。
    • count < 0:從表尾開始向表頭搜索,移除與value相等的元素,數量為count的絕對值。
    • count = 0:移除表中所有與value相等的值。
  • 返回被移除元素的數量,因為不存在的key被視作空表,所以當key不存在時,LREM命令總是返回0。

LLEN

  • LLEN key
  • 返回列表key的長度。
  • 如果key不存在,則key被解釋為一個空列表,返回0。
  • 如果key不是列表類型,返回一個錯誤。

LINDEX

  • LINDEX key index
  • 返回列表key中,下標為index的元素。
  • 下標index參數start和stop都以0為底,也就是說,以0表示列表的第一個元素,以1表示列表的第二個元素,以此類推。
  • 下標-1表示列表的最後一個元素,-2表示列表的倒數第二個元素,以此類推。
  • 如果key不是列表類型,返回一個錯誤。
  • 如果index參數的值不在列表的區間範圍內,返回nil。

LINSERT

  • LINSERT key BEFORE|AFTER pivot value
  • 將值value插入到列表key當中,位於值pivot之前或之後。
  • 當pivot不存在於列表key時,不執行任何操作。
  • 當key不存在時,key被視為空列表,不執行任何操作。
  • 如果key不是列表類型,返回一個錯誤。
  • 如果命令執行成功,返回插入操作完成之後,列表的長度。如果沒有找到pivot,返回-1。如果key不存在或為空列表,返回0。

LSET

  • LSET key index value
  • 將列表key下標為index的元素設置為value。
  • 當index參數超出範圍時,或對一個空列表進行LSET時,返回一個錯誤。
  • 操作成功返回ok,否則返回錯誤信息。

LRANGE

  • LRANGE key start stop
  • 返回列表key中指定區間內的元素,區間以偏移量start和stop指定。
  • 下標index參數start和stop都以0為底,也就是說,以0表示列表的第一個元素,以1表示列表的第二個元素,以此類推。
  • 也可以使用負數下標,以-1表示列表的最後一個元素,-2表示列表的倒數第二個元素,以此類推。
  • start和stop下標都包含在內,是一個閉區間。
  • 超出範圍的下標值不會引起錯誤。
    • 如果start下標比列表的最大下標end還要大,那麼LRANGE返回一個空列表。
    • 如果stop下標比end下標還要大,Redis將stop的值設置為end。

LTRIM

  • LTRIM key start stop
  • 對一個列表進行修剪,就是說,讓列表只保留指定區間內的元素,不在指定區間之內的元素都將被刪除。
  • start和stop下標都被包含在內,閉區間。
  • 當key不是列表類型時,返回一個錯誤。
  • 下標index參數start和stop都以0為底,也就是說,以0表示列表的第一個元素,以1表示列表的第二個元素,以此類推。
  • 也可以使用負數下標,以-1表示列表的最後一個元素,-2表示列表的倒數第二個元素,以此類推。
  • start和stop下標都包含在內,是一個閉區間。
  • 超出範圍的下標值不會引起錯誤。
    • 如果start下標比列表的最大下標end還要大,那麼LRANGE返回一個空列表。
    • 如果stop下標比end下標還要大,Redis將stop的值設置為end。
  • 命令執行成功時,返回ok。

BLPOP

  • BLPOP key [key …] timeout
  • BLPOP是列表的阻塞式彈出原語。
  • 它式LPOP key命令的阻塞版本,當給定列表內沒有任何元素可供彈出的時候,連接將被BLPOP命令阻塞,直到等待超時或發現可彈出元素為止。
  • 當給定多個key參數時,按參數key的先後順序依次檢查各個列表,彈出第一個非空列表的頭元素。
  • 非阻塞行為
    • 當BLPOP被調用時,如果給定key內至少有一個非空列表,那麼彈出遇到的第一個非空列表的頭元素,並和被彈出元素所屬的列表的名字一起,組成結果返回給調用者([key, result]。
    • 當存在多個給定key時,BLPOP按給定key參數排列的先後順序,依次檢查各個列表。
  • 阻塞行為
    • 如果所有給定key都不存在或包含空列表,那麼BLPOP命令將阻塞連接,直到等待超時,或有另一個客戶端對給定key的任意一個執行LPUSH或RPUSH命令為止。
    • 超時參數timeout接受一個以秒為單位的數字作為值。超時參數設為0表示阻塞時間可以無限期延長。
  • 相同key被多個客戶端同時阻塞
    • 相同key可以被多個客戶端同時阻塞。
    • 不同的客戶端被放進一個隊列中,按先阻塞先服務的順序為key執行BLPOP命令。
  • 在MULTI/EXEC事務中的BLPOP
    • BLPOP可以用於流水線pipeline,但把它用在MULTI/EXEC塊當中沒有意義。因為這要求整個伺服器被阻塞以保證塊執行時的原子性,該行為阻止了其他客戶端執行LPUSH或RPUSH命令。
    • 因此,一個被包裹在MULTI/EXEX塊內的BLPOP命令,行為表現得就像LPOP key一樣,對空列表返回nil,對非空列表彈出列表元素,不進行任何阻塞操作。
  • 返回值
    • 如果列表為空,返回一個nil。否則,返回一個含有兩個元素的列表,第一個元素時被彈出元素所屬的key,第二個元素是被彈出元素的值。

BRPOP

  • BRPOP key [key …] timeout
  • BRPOP是列表的阻塞式彈出原語。
  • 用法同BLPOP,不過彈出的是尾元素。

BRPOPLPUSH

  • BRPOPLPUSH source destination timeout
  • BRPOPLPUSH是RPOPLPUSH的阻塞版本,當給定列表source不為空時, BRPOPLPUSH的表現和RPOPLPUSH一樣。
  • 當列表source為空時,BRPOPLPUSH命令將阻塞連接,直到等待超時,或有另一個客戶端對source執行LPUSH或RPUSH命令為止。
  • 超時參數timeout接受一個以秒為單位的數字作為值。超時參數設為0表示阻塞時間可以無限期延長。
  • 假如在指定時間內沒有任何元素被彈出,則返回一個nil和等待時長。反之,返回一個含有兩個元素的列表,第一個元素是被彈出元素的值,第二個元素是等待時長。

集合


SADD

  • SADD key member [member …]
  • 將一個或多個member元素加入到集合key當中,已經存在於集合的member元素將被忽略。
  • 假如key不存在,則創建一個只包含member元素作成員的集合。
  • 當key不是集合類型時,返回一個錯誤。
  • 返回被添加到集合中的新元素的數量,不包括被忽略的元素。

SISMEMBER

  • SISMEMBER key member
  • 判斷member元素是否集合key的成員。
  • 如果member元素是集合的成員,返回1。如果member元素不是集合的成員,或key不存在,返回0。

SPOP

  • SPOP key
  • 移除並返回集合中的一個隨機元素。
  • 如果只想獲取一個隨機元素,但不想該元素從集合中被移除的話,可以使用SRANDMEMBER key [count]命令。
  • 當key不存在或key是空集時,返回nil。

SRANDMEMBER

  • SRANDMEMBER key [count]
  • 如果命令執行時,只提供了key參數,那麼返回集合中的一個隨機元素。
  • 從Redis2.6版本開始,SRANDMEMBER命令接受可選的count參數:
    • 如果count為正數,且小於集合基數,那麼命令返回一個包含count個元素的數組,數組中的元素各不相同。如果count大於等於集合基數,那麼返回整個集合。
    • 如果count為負數,那麼命令返回一個數組,數組中的元素可能會重覆出現多次,而數組的長度為count的絕對值。
  • 該操作和SPOP key相似,但SPOP key將隨機元素從集合中移除並返回,而SRANDMEMBER則僅僅返回隨機元素,而不對集合進行任何改動。
  • 只提供key參數時,返回一個元素;如果集合為空,返回nil。如果提供了count參數,那麼返回一個數組;如果集合為空,返回空數組。

SREM

  • SREM key member [member …]
  • 移除集合key中的一個或多個member元素,不存在的member元素會被忽略。
  • 當key不是集合類型時,返回一個錯誤。
  • 返回被成功移除的元素的數量,不包括被忽略的元素。

SMOVE

  • SMOVE source destination member
  • 將member元素從source集合移動到destination集合。
  • SMOVE是原子性操作。
  • 如果source集合不存在或不包含指定的member元素,則SMOVE命令不執行任何操作,僅返回0。否則,member元素從source集合中被移除,並添加到destination集合中去。
  • 當destination集合已經包含member元素時,SMOVE命令只是簡單地將source集合中的member元素刪除。
  • 當source或destination不是集合類型時,返回一個錯誤。
  • 如果member元素被成功移除,返回1。如果member元素不是source集合的成員,並且沒有任何操作對destination集合執行,那麼返回0。

SCARD

  • SCARD key
  • 返回集合key的基數(集合中元素的數量)。
  • 當key不存在時,返回0。

SMEMBERS

  • SMEMBERS key
  • 返回集合key中的所有成員。
  • 不存在的key被視為空集合。

SINTER

  • SINTER key [key …]
  • 返回一個集合的全部成員,該集合是所有給定集合的交集。
  • 不存在的key被視為空集。
  • 當給定集合當中有一個空集時,結果也為空集。

SINTERSTORE

  • SINTERSTORE destination key [key …]
  • 這個命令類似於SINTER key [key …]命令,但它將結果保存到destination集合,而不是簡單地返回結果集。
  • 如果destination集合已經存在,則將其覆蓋。
  • destination可以是key本身。
  • 返回結果集中的成員數量。

SUNION

  • SUNION key [key …]
  • 返回所有給定集合的並集。
  • 不存在的key被視為空集。

SUNIONSTORE

  • SUNIONSTORE destination key [key …]
  • 這個命令類似於SUNION,但它將結果保存到destination集合,而不是簡單地返回結果集。
  • 如果destination已經存在,則將其覆蓋。
  • destination可以是key本身。
  • 返回集中的元素數量。

SDIFF

  • SDIFF key [key …]
  • 返回所有給定集合之間的差集。
  • 不存在的key被視為空集。

SDIFFSTORE

  • SDIFFSTORE destination key [key …]
  • 這個命令的作用和SDIFF類似,但它將結果保存到destination集合,而不是簡單地返回結果集。
  • 如果destination集合已經存在,則將其覆蓋。
  • destination可以是key本身。
  • 返回結果集中的元素數量。

有序集合


ZADD

  • ZADD key score member [[score member] [score member] …]
  • 將一個或多個member元素及其score值加入到有序集key當中。
  • 如果某個member已經是有序集的成員,那麼更新這個member的score值,並通過重新插入這個member元素,來保證該member在正確的位置上。
  • score值可以是整數值或雙精度浮點數。
  • 如果key不存在,則創建一個空的有序集並執行ZADD操作。
  • 當key存在但不是有序集類型時,返回一個錯誤。
  • 返回被成功添加的新成員的數量,不包括那些被更新的、已經存在的成員。

ZSCORE

  • ZSCORE key member
  • 返回有序集key中,成員member的score值,以字元串形式表示。
  • 如果member元素不是有序集key的成員,或key不存在,返回nil。

ZINCRBY

  • ZINCRBY key increment member
  • 為有序集key的成員member的score值加上增量increment。
  • 可以通過傳遞一個負數值increment,讓score減去相應的值。
  • 當key不存在,或member不是key的成員時,ZINCRBY key increment member等同於ZADD key increment member。
  • 當key不是有序集類型時,返回一個錯誤。
  • score值可以是整數值或雙精度浮點數。
  • 返回member成員的新score值,以字元串形式表示。

ZCARD

  • ZCARD key
  • 當key存在且是有序集類型時,返回有序集的基數。當key不存在時,返回0。

ZCOUNT

  • ZCOUNT key min max
  • 返回有序集key中,score值在min和max之間(預設包括等於)的成員的數量。

ZRANGE

  • ZRANGE key start stop [WITHSCORES]
  • 返回有序集key中,指定區間內的成員。
  • 其中成員的位置按score值遞增來排序。
  • 具有相同score值的成員按字典序來排列。
  • 如果需要成員按score值遞減來排列,請使用ZREVRANGE key start stop [WITHSCORES]命令。
  • 下標參數start和stop都以0為底,也就是說,以0表示有序集第一個成員,以1表示有序集第二個成員,以此類推。你也可以使用負數下標,以-1表示最後一個成員,-2表示倒數第二個成員,以此類推。
  • 超出範圍的下標並不會引起錯誤。比如說,當start的值比有序集的最大下標還要大,或是start>stop時,ZRANGE命令只是簡單地返回一個空列表。另一方面,假如stop參數的值比有序集的最大下標還要大,那麼Redis將stop當作最大下標來處理。
  • 可以通過使用WITHSCORES選項,來讓成員和它的score值一併返回,返回列表以value1、socre1、value2、score2...的格式表示。客戶端庫可能會返回一些更複雜的數據類型,比如數組、元組等。
  • 返回指定區間內,帶有score值(可選)的有序集成員的列表。

ZREVRANGE

  • ZREVRANGE key start stop [WITHSCORES]
  • 除了成員按score值遞減的次序排列這一點外,ZREVRANGE命令的其他方面和ZRANGE命令一樣。

ZRANGEBYSCORE

  • ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
  • 返回有序集key中,所有score值介於min和max之間(包括等於min或max)的成員。有序集成員按score值遞增次序排列。
  • 具有相同score值的成員按字典序來排列(該屬性是有序集提供的,不需要額外的計算)。
  • 可選的LIMIT參數指定返回結果的數量及區間,註意當offset很大時,定位offset的操作可能需要遍歷整個有序集,此過程最壞複雜度為O(N)時間。
  • 可選的WITHSCORES參數決定結果集是單單返回有序集的成員,還是將有序集成員及其socre值一起返回。
  • 區間及無限
    • min和max可以是-inf和+inf,這樣一來,你就可以在不知道有序集的最低和最高score值的情況下,使用ZRANGEBYSCORE這類命令。
    • 預設情況下,區間的取值使用閉區間(小於等於或大於等於),你也可以通過給參數前增加(符號來使用可選的開區間(小於或大於)。
  • 返回指定區間內,帶有score值(可選)的有序集成員的列表。

ZREVRANGEBYSCORE

  • ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]
  • 除了成員按score值遞減的次序排列這一點外,ZREVRANGEBYSCORE命令的其他方面和ZRANGEBYSCORE命令一樣。

ZRANK

  • ZRANK key member
  • 返回有序集key中成員member的排名。其中有序集成員按score值遞增順序排列。
  • 排名以0為底,也就是說,score值最小的成員排名為0。
  • 使用ZREVRANK命令可以獲得成員按score值遞減排列的排名。
  • 如果member是有序集key的成員,返回member的排名。如果member不是有序集key的成員,返回nil。

ZREVRANK

  • ZREVRANK key member
  • 返回有序集key中成員member的排名。其中有序集成員按score值遞減順序排列。
  • 排名以0為底,也就是說,score值最大的成員排名為0。
  • 使用ZRANK命令可以獲得成員按score值遞增排列的排名。
  • 如果member是有序集key的成員,返回member的排名。如果member不是有序集key的成員,返回nil。

ZREM

  • ZREM key member [member …]
  • 移除有序集key中的一個或多個成員,不存在的成員將被忽略。
  • 當key存在但不是有序集類型時,返回一個錯誤。
  • 返回被成功移除的成員的數量,不包括被忽略的成員。

ZREMRANGEBYRANK

  • ZREMRANGEBYRANK key start stop
  • 移除有序集key中,指定排名區間內的所有成員。
  • 區間分別以下標參數start和stop指出,包含start和stop在內。
  • 下標參數start和stop都以0為底,也就是說,以0表示有序集第一個成員,以1表示有序集第二個成員,以此類推。你也可以使用負數下標,以-1表示最後一個成員,-2表示倒數第二個成員,以此類推。
  • 返回被移除成員的數量。

ZREMRANGEBYSCORE

  • ZREMRANGEBYSCORE key min max
  • 移除有序集key中,所有score值介於min和max之間(包括等於min或max)的成員。
  • score值等於min或max的成員也可以不包括在內,同ZRANGEBYSCORE命令。
  • 返回被移除成員的數量。

ZRANGEBYLEX

  • ZRANGEBYLEX key min max [LIMIT offset count]
  • 當有序集合的所有成員都具有相同的分值時,有序集合的元素會根據成員的字典序來進行排序,而這個命令則可以返回給定的有序集合鍵key中,值介於min和max之間的成員。
  • 如果有序集合裡面的成員帶有不同的分值,那麼命令返回的結果是未指定的。
  • 命令會使用C語言的memcmp()函數,對集合中的每個成員進行逐個位元組的對比,並按照從低到高的順序,返回排序後的集合成員。如果兩個字元串有一部分內容是相同的話,那麼命令會認為較長的字元串比較短的字元串要大。
  • 可選的LIMIT offset count參數用於獲取指定範圍內的匹配元素。如果offset參數的值非常大的話,那麼命令在返回結果之前,需要先遍歷至offset所指定的位置,這個操作會為命令加上最多O(N)複雜度。
  • 合法的min和max參數必須包含(或者[,其中(表示開區間,而[則表示閉區間。
  • 特殊值+和-在min參數以及max參數中具有特殊的意義,其中+表示正無限,而-表示負無限。因此,向一個所有成員的分值都相同的有序集合發送命令ZRANGEBYLEX <zset> - +,命令將返回有序集合中的所有元素。
  • 返回一個列表,包含了有序集合在指定範圍內的成員。

ZLEXCOUNT

  • ZLEXCOUNT key min max
  • 對於一個所有成員的分值都相同的有序集合鍵key來說,這個命令會返回該集合中,成員介於min和max範圍內的元素數量。
  • 這個命令的min參數和max參數的意義和ZRANGEBYLEX命令一樣。
  • 返回指定範圍內的元素數量。

ZREMRANGEBYLEX

  • ZREMRANGEBYLEX key min max
  • 對於一個所有成員的分值都相同的有序集合鍵key來說,這個命令會移除該集合中,成員介於min和max範圍內的所有元素。
  • 這個命令的min參數和max參數的意義和ZRANGEBYLEX命令一樣。
  • 返回被移除的元素數量。

ZUNIONSTORE

  • ZUNIONSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]] [AGGREGATE SUM|MIN|MAX]
  • 計算給定的一個或多個有序集的並集,其中給定key的數量必須以numkeys參數指定,並將該並集儲存到destination。
  • 預設情況下,結果集中某個成員的score值是所有給定集下該成員score值之和。
  • WEIGHTS
    • 使用WEIGHTS選項,你可以為每個給定有序集分別指定一個乘法因數,每個給定有序集的所有成員的score值在傳遞給集合函數之前都要先乘以該有序集的因數。
    • 如果沒有指定WEIGHTS選項,乘法因數預設設置為1。
  • AGGREGATE
    • 使用AGGREGATE選項,你可以指定並集的結果集的聚合方式。
    • 預設使用的參數SUM,為加法;使用MIN,用最小的那個值;使用MAX,用最大的那個值。
  • 返回保存到destination結果集的基數。

ZINTERSTORE

  • ZINTERSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]] [AGGREGATE SUM|MIN|MAX]
  • 計算給定的一個或多個有序集的交集,其中給定key的數量必須以numkeys參數指定,並將該交集儲存到destination。
  • 可選參數同ZUNIONSTORE
  • 返回保存到destination結果集的基數。

資料庫


EXISTS

  • EXISTS key
  • 檢查給定key是否存在,若key存在,返回1,否則返回0。

TYPE

  • TYPE key
  • 返回key所儲存的值的類型:
    • none(key不存在)
    • string(字元串)
    • list(列表)
    • set(集合)
    • zset(有序集)
    • hash(哈希表)
    • stream(流)

RENAME

  • RENAME key newkey
  • 將key改名為newkey。
  • 當key和newkey相同,或者key不存在時,返回一個錯誤。
  • 當newkey已經存在時,RENAME命令將覆蓋舊值。
  • 改名成功時提示OK,失敗時候返回一個錯誤。

RENAMENX

  • RENAMENX key newkey
  • 當且僅當newkey不存在時,將key改名為newkey。
  • 當key不存在時,返回一個錯誤。
  • 修改成功時,返回1;如果newkey已經存在,返回0。

MOVE

  • MOVE key db
  • 將當前資料庫的key移動到給定的資料庫db當中。
  • 如果當前資料庫和給定資料庫有相同名字的給定key,或者key不存在於當前資料庫,那麼MOVE沒有任何效果。
  • 因此也可以利用這一特性,將MOVE當作鎖原語。
  • 移除成功返回1,失敗則返回0。

DEL

  • DEL key [key …]
  • 刪除給定的一個或多個key。
  • 不存在的key會被忽略。
  • 返回被刪除key的數量。

RANDOMKEY

  • RANDOMKEY
  • 從當前資料庫中隨機返回(不刪除)一個key。
  • 當資料庫不為空時,返回一個key。當資料庫為空時,返回nil。

DBSIZE

  • DBSIZE
  • 返回當前資料庫的key的數量。

KEYS

  • KEYS pattern
  • 查找所有符號給定模式pattern的key,比如說:
    • KEYS *匹配資料庫中所有key。
    • kEYS h?llo匹配hello,hallo和hxllo等。
    • kEYS h*llo匹配hllo和heeeello等。
    • KEYS h[ae]llo匹配hello和hallo,但不匹配hillo。
  • 特殊符號用\隔開。
  • 返回給定模式的key列表。

SCAN

  • SCAN cursor [MATCH pattern] [COUNT count]
  • SCAN命令及其相關的SSCAN命令、HSCAN命令和ZSCAN命令都用於增量地迭代一集元素:
    • SCAN命令用於迭代當前資料庫中的資料庫鍵。
    • SSCAN命令用於迭代集合鍵中的元素。
    • HSCAN命令用於迭代哈希鍵中的鍵值對。
    • ZSCAN命令用於迭代有序集合中的元素(包括元素成員和元素分值)。
  • 以上列出的四個命令都支持增量式迭代,它們每次執行都只會返回少量元素,所以這些命令可以用於生產環境,而不會出現像KEYS命令、SMEMBERS命令帶來的問題——當KEYS命令被用於處理一個大的資料庫時,又或者SMEMBERS命令被用於處理一個大的集合鍵時,它們可能會阻塞伺服器達數秒之久。
  • 不過,增量式迭代命令也不是沒有缺點的:舉個例子,使用SMEMBERS命令可以返回集合鍵當前包含的所有元素,但是對於SCAN這類增量式迭代命令來說,因為在對鍵進行增量式迭代的過程中,鍵可能會被修改,所以增量式迭代命令只能對被返回的元素提供有限的保證。
  • 因為SCAN、SSCAN、HSCAN和ZSCAN四個命令的工作方式都非常相似,所以這個文檔會一併介紹這四個命令
    • SSCAN命令、HSCAN命令和ZSCAN命令的第一個參數總是一個資料庫鍵。
    • 而SCAN命令則不需要在第一個參數提供任何資料庫鍵——因為它迭代的是當前資料庫中的所有資料庫鍵。
  • SCAN命令的基本用法
    • SCAN命令是一個基於游標的迭代器:SCAN命令每次被調用之後,都會向用戶返回一個新的游標,用戶在下次迭代時需要使用這個新游標作為SCAN命令的游標參數,以此來延續之前的迭代過程。
    • 當SCAN命令的游標參數被設置為0時,伺服器將開始一次新的迭代,而當伺服器向用戶返回值為0的游標時,表示迭代已結束。
    • SCAN命令的回覆是一個包含兩個元素的數組,第一個數組元素是用於進行下一次迭代的新游標,而第二個數組元素則是一個數組,這個數組中包含了所有被迭代的元素。
    • 以0作為游標開始一次新的迭代,一直調用SCAN命令,直到命令返回游標0,我們稱這個過程為一次完整遍歷。
  • SCAN命令的保證
    • SCAN命令,以及其他增量式迭代命令,在進行完整遍歷的情況下可以為用戶帶來以下保證:從完整遍歷開始直到完整遍歷結束期間,一直存在於數據集內的所有元素都會被完整遍歷返回;這意味著,如果有一個元素,它從遍歷開始直到遍歷結束期間都存在於被遍歷的數據集當中,那麼SCAN命令總會在某次迭代中將這個元素返回給用戶。
    • 然而因為增量式命令僅僅使用游標來記錄迭代狀態,所以這些命令帶有以下缺點:
      • 同一個元素可能會被返回多次。處理重覆元素的工作交由應用程式負責,比如說,可以考慮將迭代返回的元素僅僅用於可以安全地重覆執行多次的操作上。
      • 如果一個元素是在迭代過程中被添加到數據集的,又或者是在迭代過程中從數據集中被刪除的,那麼這個元素可能會被返回,也可能不會,這是未定義的。
  • SCAN命令每次執行返回的元素數量
    • 增量式迭代命令並不保證每次執行都返回某個給定數量的元素。
    • 增量式命令甚至可能會返回零個元素,但只要命令返回的游標不是0,應用程式就不應該將迭代視作結束。
    • 不過命令返回的元素數量總是符合一定規則的,在實際中:
      • 對於一個大數據集來說,增量式迭代命令每次最多可能會返回數十個元素。
      • 而對於一個足夠小的數據集來說,如果這個數據集的底層表示為編碼數據結構,那麼增量迭代命令將在一次調用中返回數據集中的所有元素。
    • 用戶可以通過增量式迭代命令提供的COUNT選項來指定每次迭代返回元素的最大值。
  • COUNT選項
    • 雖然增量式迭代命令不保證每次迭代所返回的元素數量,但我們可以使用COUNT選項,對命令的行為進行一定程度上的調整。
    • 基本上,COUNT選項的作用就是讓用戶告知迭代命令,在每次迭代中應該從數據集里返回多少元素。
    • 雖然COUNT選項只是對增量式迭代命令的一種提示,但是在大多數情況下,這種提示都是有效的。
      • COUNT參數的預設值為10。
      • 在迭代一個足夠大的、由哈希表實現的資料庫、集合鍵、哈希鍵或者有序集合鍵時,如果用戶沒有使用MATCH選項,那麼命令返回的元素數量通常和COUNT選項指定的一樣,或者比COUNT選項指定的數量稍多一些。
      • 在迭代一個編碼為整數集合、或者編碼為壓縮列表時,增量式迭代命令通常會無視COUNT選項指定的值,在第一次迭代就將數據集包含的所有元素都返回給用戶。
      • 並非每次迭代都要使用相同的COUNT值。
      • 用戶可以在每次迭代中按自己的需要隨意改變COUNT值,只要記得將上次迭代返回的游標用到下次迭代里就可以了。
  • MATCH選項
    • 和KEYS命令一樣,增量式迭代命令也可以通過提供一個glob風格的模式參數,讓命令只返回和給定模式相匹配的元素,這一點可以通過在執行增量式迭代命令時,通過給定MATCH 參數來實現。比如sscan key 0 match f*
    • 對元素的模式匹配工作是在命令從數據集中取出元素之後,向客戶端返回元素之前的這段時間內進行的,所有如果被迭代的數據集中只有少量元素和模式相匹配,那麼迭代命令或許會在多次執行中都不返回任何元素。
  • 併發執行多個迭代
    • 在同一時間,可以有任意多個客戶端對同一數據集進行迭代,客戶端每次執行都需要傳入一個游標,併在迭代執行之後獲得一個新的游標,而這個游標就包含了迭代的所有狀態,因此,伺服器無須為迭代記錄任何狀態。
  • 中途停止迭代
    • 因為迭代的所有狀態都保存在游標裡面,而伺服器無須為迭代保存任何狀態,所以客戶端可以在中途停止一個迭代,而無須對伺服器進行任何通知。
    • 即使有任意數量的迭代在中途停止,也不會產生任何問題。
  • 使用錯誤的游標進行增量式迭代
    • 使用間斷的、負數、超出範圍或者其他非正常的游標來執行增量式迭代並不會造成伺服器崩潰,但可能會讓命令產生未定義的行為。
    • 未定義行為指的是,增量式命令對返回值所做的保證可能會不再為真。
    • 只有兩種游標是合法的:
      • 1、在開始一個新的迭代時,游標必須為0。
      • 2、增量式迭代命令在執行之後返回的,用於延續迭代過程的游標。
  • 迭代終結的保證
    • 增量式迭代命令所使用的演算法只保證在數據集的大小有界的情況下,迭代才會停止,換句話說,如果被迭代數據集的大小不斷地增長的話,增量式迭代命令可能永遠也無法完成一次完整迭代。
    • 從直覺上可以看出,當一個數據集不斷地變大時,想要訪問這個數據集中的所有元素就需要做越來越多的工作,能否結束一個迭代取決於用戶執行迭代的速度是否比數據集增長的速度更快。
  • 返回值
    • SCAN命令、SSCAN命令、HSCAN命令和ZSCAN命令都返回一個包含兩個元素的multi-bulk回覆:回覆的第一個元素是字元串表示的無符號64位整數,回覆的第二個元素是另一個multi-bulk回覆,這個multi-bulk回覆包含了本次被迭代的元素。
    • SCAN命令返回的每個元素都是一個資料庫鍵。
    • SSCAN命令返回的每個元素都是一個集合成員。
    • HSCAN命令返回的每個元素都是一個鍵值對,一個鍵值對由一個鍵和一個值組成。
    • ZSCAN命令返回的每個元素都是一個有序集合元素,一個有序集合元素由一個成員和一個分值組成。

SORT

  • SORT key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern …]] [ASC | DESC] [ALPHA] [STORE destination]
  • 返回或保存給定列表、集合、有序集合key中經過排序的元素。
  • 排序預設以數字作為對象,值被解釋為雙精度浮點數,然後進行比較。
  • 最簡單的SORT使用方法是SORT key和SORT key DESC。
    • SORT key返回鍵值從小到大排序的結果。
    • SORT key DESC返回鍵值從大到小排序的結果。
  • 因為SORT命令預設排序對象為數字,當需要對字元串進行排序時,需要顯式地在SORT命令之後添加ALPHA修飾符。
  • 排序之後返回元素的數量可以通過LIMIT修飾符進行限制,修飾符接受offset和count兩個參數:
    • offset指定要跳過的元素數量。
    • count指定跳過offset個指定的元素之後,要返回多少個對象。
  • 可以使用外部key的數據作為權重, 代替預設的直接對比的鍵值的方式來進行排序。
    • 通過BY選項,可以讓key讓其他鍵的元素來排序,比如SORT key BY other_*讓key鍵按照other_{key}的大小來排序。other_*是一個占位符,它先取出key中的值,然後在用這個值來查找對應的鍵。
    • 使用GET選項,可以根據排序的結果來取出相應的鍵值,比如SORT key GET other_*,先排序key,在取出鍵other_{key}的值

FLUSHDB

  • FLUSHDB
  • 清空當前資料庫中的所有key。
  • 此命令從不失敗。
  • 總是返回OK。

FLUSHALL

  • FLUSHALL
  • 清空整個Redis伺服器的數據(刪除所有資料庫的所有key)。
  • 此命令從不失敗。
  • 總是返回OK。

SELECT

  • SELECT index
  • 切換到指定的資料庫,資料庫索引號index用數字值指定,以0作為起始索引值。
  • 預設使用0號資料庫。
  • 返回OK。

SWAPDB

  • SWAPDB db1 db2
  • 對換指定的兩個資料庫,使得兩個資料庫的數據立即互換。
  • 返回OK。

自動過期


EXPIRE

  • EXPIRE key seconds
  • 為給定key設置生存時間,當key過期時,它會被自動刪除。
  • 在Redis中,帶有生存時間的key被稱為易失的。
  • 生存時間可以通過使用DEL命令來刪除整個key來移除,或者被SET和GETSET命令覆寫,這意味著,如果一個命令只是修改一個帶生存時間的key的值而不是用一個新的key值來代替它的話,那麼生存時間不會被改變。
  • 比如說,對一個key執行INCR命令,對一個列表進行LPUSH命令,或者對一個哈希表執行HSET命令,這類操作都不會修改key本身的生存時間。
  • 另一方面,如果使用RENAME對一個key進行改名,那麼改名後的key的生成時間和改名前一樣。
  • RENAME命令的另一種可能是,嘗試將一個帶生存時間的key改名成另一個帶生存時間的another_key,這時舊的another_key會被刪除,然後舊的key會改名為another_key,因此,新的another_key的生存時間也和原本的key一樣。
  • 使用PERSIST命令可以在不刪除key的情況下,移除key的生存時間,讓key重新成為一個持久的key。
  • 可以對一個已經帶有生存時間的key執行EXPIRE命令,新指定的生存時間會取代舊的生存時間。
  • 設置成功返回1。當key不存在或者不能為key設置生存時間時,返回0。

EXPIREAT

  • EXPIREAT key timestamp
  • EXPIREAT的作用和EXPIRE類似,都用於為key設置生存時間。
  • 不同在於EXPIREAT命令接受的時間參數是UNIX時間戳。
  • 如果生存時間設置成功,返回1;當key不存在或沒辦法設置生存時間, 返回0。

TTL

  • TTL key
  • 以秒為單位,返回給定key的剩餘生存時間。
  • 當key不存在時,返回-2。當key存在但沒有設置剩餘生存時間時,返回-1。否則,以秒為單位,返回key的剩餘生存時間。

PERSIST

  • PERSIST key
  • 移除給定key的生存時間,將這個key從易失的轉換成持久的。
  • 當生存時間移除成功時,返回1,如果key不存在或key沒有設置生存時間,返回0。

PEXPIRE

  • PEXPIRE key milliseconds
  • 這個命令和EXPIRE命令的作用類似,但是它以毫秒為單位設置key的生存時間,而不是秒。
  • 設置成功,返回1;key不存在或設置失敗,返回0。

PEXPIREAT

  • PEXPIREAT key milliseconds-timestamp
  • 這個命令和EXPIREAT命令類似,但它以毫秒為單位設置key的過期unix時間戳,而不是像expireat那樣,以秒為單位。
  • 如果生存時間設置成功,返回1。當key不存在或沒辦法設置生存時間時,返回0。

PTTL

  • PTTL key
  • 這個命令類似於TTL命令,但它以毫秒為單位返回key的剩餘生存時間,而不是秒。
  • 當key不存在時,返回-2;當key存在但是沒有設置剩餘生存時間時,返回-1;否則,以毫秒為單位,返回key的剩餘生存時間。

事務


MULTI

  • MULTI
  • 標記一個事務塊的開始。
  • 事務塊內的多條命令會按照先後順序被放進一個隊列當中,最後由EXEC命令原子性地執行。
  • 總是返回OK。

EXEC

  • EXEC
  • 執行所有事務塊內的命令。
  • 假如某個key正處在WATCH命令的監視之下,且事務塊中有和這個key相關的命令,那麼EXEC命令只在這個key沒有被其他命令所改動的情況下執行並生效,否則該事務被打斷。
  • 返回事務塊內所有命令的返回值,按命令執行的先後順序排列;當操作被打斷時,返回空值nil。

DISCARD

  • DISCARD
  • 取消事務,放棄執行事務塊內的所有命令。
  • 如果正在使用WATCH命令監視某個key,那麼取消所有監視,等同於執行命令UNWATCH。
  • 總是返回OK。

WATCH

  • WATCH key [key …]
  • 監視一個或多個key,如果在事務執行之前這個或這些key被其他命令所改動,那麼事務將被打斷。
  • 總是返回OK。

UNWATCH

  • UNWATCH
  • 取消WATCH命令對所有key的監視。
  • 如果在執行WATCH命令之後,EXEC命令或DISCARD命令先被執行了的話,那麼就不需要再執行UNWATCH了。
  • 因為EXEC命令會執行事務,因此WATCH命令的效果已經產生了;而DISCARD命令在取消事務的同時也會取消所有對key的監視,因此這兩個命令執行之後,就沒有必要執行UNWATCH了。
  • 總是返回OK。

HyperLogLog


PFADD

  • PFADD key element [element …]
  • 將任意數量的元素添加到指定的HyperLogLog裡面。
  • 作為這個命令的副作用,HyperLogLog內部可能會被更新,以便反映一個不同的唯一元素估計數量(也即是集合的基數)。
  • 如果HyperLogLog估計的近似基數在命令執行之後出現了變化,那麼命令返回1,否則返回0。如果命令執行時給定的鍵不存在,那麼程式將先創建一個空的HyperLogLog結構,然後再執行命令。
  • 調用此命令時可以只給定鍵名而不給定元素
    • 如果給定鍵已經是一個HyperLogLog,那麼這種調用不會產生任何效果。
    • 但如果給定的鍵不存在,那麼命令會創建一個空的HyperLogLog,並向客戶端返回1。
  • 如果HyperLogLog的內部儲存被修改了,那麼返回1,否則返回0。

PFCOUNT

  • PFCOUNT key [key …]
  • 當PFCOUNT key [key …]命令作用於單個鍵時,返回儲存在給定鍵的HyperLogLog的近似基數,如果鍵不存在,那麼返回0。
  • 當PFCOUNT key [key …]命令作用於多個鍵時,返回所有給定HyperLogLog的並集的近似基數,這個近似基數是通過將所有給定HyperLogLog合併至一個臨時HyperLogLog來計算得出的。
  • 通過HyperLogLog數據結構,用戶可以使用少量固定大小的記憶體,來儲存集合中的唯一元素(每個HyperLogLog只需使用12k位元組記憶體,以及幾個位元組的記憶體來儲存鍵本身)。
  • 命令返回的可見集合基數並不是精確值,而是一個帶有0.81%標準錯誤的近似值。
  • 返回給定HyperLogLog包含的唯一元素的近似數量。

PFMERGE

  • PFMERGE destkey sourcekey [sourcekey …]
  • 將多個HyperLogLog合併為一個HyperLogLog,合併後的HyperLogLog的基數接近於所有輸入HyperLogLog的可見集合的並集。
  • 合併得出的hyperLogLog會被儲存在destkey鍵裡面,如果該鍵並不存在,那麼命令在執行之前,會先為該鍵創建一個空的HyperLogLog。
  • 返回OK。

地理位置


GEOADD

  • GEOADD key longitude latitude member [longitude latitude member …]
  • 將給定的空間元素(緯度、經度、名字)添加到指定的鍵裡面。這些數據會以有序集合的形式被儲存在鍵裡面,從而使得像GEORADIUS和GEORADIUSBYMEMBER這樣的命令可以在之後通過位置查詢取得這些元素。
  • GEOADD命令以標準的x,y格式接受參數,所以用戶必須先輸入經度,然後再輸入緯度。
  • GEOADD能夠記錄的坐標是有限的:非常接近兩極的區域是無法被索引的。精確的坐標限制由坐標系統定義,具體如下:
    • 有效的經度介於-180度至180度之間。
    • 有效的緯度介於-85.05112878度至85.05112878度之間。
  • 當用戶嘗試輸入一個超出範圍的經度或者緯度時,GEOADD命令將返回一個錯誤。
  • 返回新添加到鍵裡面的空間元素數量,不包括那些已經存在但是被更新的元素。

GEOPOS

  • GEOPOS key member [member …]
  • 從鍵裡面返回所有給定位置元素的位置(經度和緯度)。
  • 因為GEOPOS命令接受可變數量的位置元素作為輸入,所以即使用戶只給定了一個位置元素,命令也會返回數組回覆。
  • 返回一個數組,數組中的每個項都由兩個元素組成:第一個元素為給定位置元素的經度,而第二個元素則為給定位置元素的緯度。當給定的位置元素不存在時,對應的數組項為空值。

GEODIST

  • GEODIST key member1 member2 [unit]
  • 返回兩個給定位置之間的距離。
  • 如果兩個位置之間的其中一個不存在,那麼命令返回空值。
  • 指定單位的參數unit必須是以下單位的其中一個:
    • m表示單位為米
    • km表示單位為千米
    • mi表示單位為英里
    • ft表示單位為英尺
  • 如果用戶沒有顯式地指定單位參數,那麼GEODIST預設使用米作為單位。
  • GEODIST命令在計算距離時會假設地球為完美的球形,在極限情況,這一假設最大會造成0.5%的誤差。
  • 計算出的距離會以雙精度浮點數的形式被返回。如果給定的位置元素不存在,那麼命令返回空值。

GEORADIUS

  • GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [ASC|DESC] [COUNT count]
  • 以給定的經緯度為中心,返回鍵包含的位置元素當中,與中心的距離不超過給定的最大距離的所有位置元素。
  • 範圍可以使用以下其中一個單位:
    • m表示單位為米
    • km表示單位為千米
    • mi表示單位為英里
    • ft表示單位為英尺
  • 在給定以下可選項時,命令會返回額外的信息:
    • WITHDIST:在返回位置元素的同時,將位置元素與中心之間的距離也一併返回。距離的單位和用戶給定的範圍單位保持一致。
    • WITHCOORD:將位置元素的經度和緯度也一併返回。
    • WITHHASH:以52位有符號整數的形式,返回位置元素經過原始geohash編碼的有序集合分值。這個選項主要用於底層應用或者調試,實際中的作用並不大。
  • 命令預設返回未排序的位置元素。通過以下兩個參數,用戶可以指定被返回位置元素的排序方式:
    • ASC:根據中心的位置,按照從近到遠的方式返回位置元素。
    • DESC:根據中心的位置,按照從遠到近的方式返回位置元素。
  • 在預設情況下,GEORADIUS命令會返回所有匹配的位置元素。雖然用戶可以使用COUNT 選項去獲取前N個匹配元素,但是因為命令在內部可能會需求對所有被匹配的元素進行處理,所以在對一個非常大的區域進行搜索時,即使只使用COUNT選項去獲取少量元素,命令的執行速度也可能會非常慢。但是從另一個方面來說,使用COUNT選項去減少需求返回的元素數量,對於減少帶寬來說仍然是非常有用的。
  • GEORADIUS命令
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 使用原因: 在我們服務端調用第三方介面時,如:支付寶,微信支付,我們服務端需要模擬http請求並加上一些自己的邏輯響應給前端最終達到我們想要的效果 1.使用WebClient 引用命名空間 using System.Net; using System.Collections.Specialized; ...
  • time.h 頭文件 是 C 語言中 有關 時間的函數所儲存的頭文件 #include <time.h> 在介紹時間函數用法之前,我們首先要瞭解在 time.h 頭文件中已經聲明瞭的一個結構: struct tm 該結構在time.h 頭文件內聲明如下: #ifndef _TM_DEFINED #d ...
  • GlueMotion是Mac上的縮時攝影軟體,gluemotion可以對圖片進行批量操作,包括編輯、去閃爍,並將圖像序列彙編成縮時影片等,GlueMotion還可以為攝影作品進行最佳效果矯正,是攝影師必備的一款軟體。 詳情:GlueMotion for Mac(縮時攝影製作工具) GlueMotio ...
  • Compressor for Mac是一款視頻轉碼工具,可以將媒體文件轉碼為各種格式的應用。您可以將 Compressor 用於:使用標準清晰度 (SD)、高清晰度 (HD) 和 4K 格式(包括 H.264 和 HEVC,也稱為 H.265)導出視頻以在 Apple 設備上觀看。此次更新新增了從“ ...
  • docker容器網路配置 Docker在安裝後自動提供3種網路,可以使用docker network ls命令查看 [root@localhost ~]# docker network ls NETWORK ID NAME DRIVER SCOPE bca5c00311b4 bridge bridg ...
  • 口袋妖怪原生花3:華麗的冒險 for Mac是一款熱門受歡迎的角色扮演游戲,游戲的舞臺與寶石版相同,並且加入了多種全新的要素。游戲會採用全新的故事劇情,並且加入了新的口袋妖怪。 詳情:口袋妖怪原生花3:華麗的冒險 for Mac(角色扮演類游戲) 口袋妖怪華麗の冒險是一部口袋妖怪外傳性質的作品,繼《 ...
  • 1、在桌面新建一個txt文檔,複製下麵的代碼進去,如圖: slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX slmgr /skms kms.03k.org slmgr /ato 2、點擊文件選擇“另存為”,保存的位置選桌面,保存的類型改為所有文件,文件名改為.bat後 ...
  • 首先nosql可以被理解為not only sql 泛指非關係型資料庫,也就是說不僅僅是sql,所以它既包含了sql的一些東西,但是又和sql不同,併在其的基礎上改變或者說擴展了一些東西。 提到nosql,首先我們就要分析一下關係型資料庫的行式存儲和非關係型資料庫的列式存儲區別在哪? 行式存儲我們都 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...