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*
- 對元素的模式匹配工作是在命令從數據集中取出元素之後,向客戶端返回元素之前的這段時間內進行的,所有如果被迭代的數據集中只有少量元素和模式相匹配,那麼迭代命令或許會在多次執行中都不返回任何元素。
- 和KEYS命令一樣,增量式迭代命令也可以通過提供一個glob風格的模式參數,讓命令只返回和給定模式相匹配的元素,這一點可以通過在執行增量式迭代命令時,通過給定MATCH
- 併發執行多個迭代
- 在同一時間,可以有任意多個客戶端對同一數據集進行迭代,客戶端每次執行都需要傳入一個游標,併在迭代執行之後獲得一個新的游標,而這個游標就包含了迭代的所有狀態,因此,伺服器無須為迭代記錄任何狀態。
- 中途停止迭代
- 因為迭代的所有狀態都保存在游標裡面,而伺服器無須為迭代保存任何狀態,所以客戶端可以在中途停止一個迭代,而無須對伺服器進行任何通知。
- 即使有任意數量的迭代在中途停止,也不會產生任何問題。
- 使用錯誤的游標進行增量式迭代
- 使用間斷的、負數、超出範圍或者其他非正常的游標來執行增量式迭代並不會造成伺服器崩潰,但可能會讓命令產生未定義的行為。
- 未定義行為指的是,增量式命令對返回值所做的保證可能會不再為真。
- 只有兩種游標是合法的:
- 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}的值
- 通過BY選項,可以讓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命令