Redis支持的數據結構及命令html
你也許已經知道Redis並非簡單的key-value存儲,實際上他是一個數據結構服務器,支持不一樣類型的值。也就是說,你沒必要僅僅把字符串看成鍵所指向的值。下列這些數據類型均可做爲值類型:python
數據類型mysql |
說明c++ |
Strings(字符串)web |
二進制安全的字符串redis |
Lists(列表)sql |
按插入順序排序的字符串元素的集合。他們基本上就是鏈表(linked lists)。mongodb |
Sets(集合)數據庫 |
不重複且無序的字符串元素的集合。安全 |
Sorted sets(有序集合) |
相似Sets,可是每一個字符串元素都關聯到一個叫score浮動數值(floating number value)。裏面的元素老是經過score進行着排序,因此不一樣的是,它是能夠檢索的一系列元素。(例如你可能會問:給我前面10個或者後面10個元素)。 |
Hashes(散列) |
由field和關聯的value組成的map。field和value都是字符串的 |
bitmaps |
經過特殊的命令,你能夠將 String 值看成一系列 bits 處理:能夠設置和清除單獨的 bits,數出全部設爲 1 的 bits 的數量,找到最前的被設爲 1 或 0 的 bit,等等。 |
hyperloglog |
估計一個 set 中元素數量的機率性的數據結構。 |
geospatial(地理空間) |
Redis命令十分豐富,包括的命令組有Cluster、Connection、Geo、Hashes、HyperLogLog、Keys、Lists、Pub/Sub、Scripting、Server、Sets、Sorted Sets、Strings、Transactions一共14個redis命令組兩百多個redis命令。
命令 |
命令說明 |
DEL |
刪除給定的一個或多個 key |
DUMP |
序列化給定key,並返回被序列化的值 |
EXISTS |
檢查給定的key是否存在 |
EXPIRE |
給key設置生存時間 |
EXPIREAT |
同EXPIRE相似,不過接受的時間參數是UNIX的時間戳 |
KEYS |
查詢符合給定模式的key |
MIGRATE |
傳輸key到目標實例 |
MOVE |
將當前數據庫的key移動到給定的數據庫db中 |
OBJECT |
命令容許從內部察看給定 key 的 Redis 對象 |
PRESIST |
移除給定key的生存時間,結合EXPIRE使用 |
PEXPIRE |
同 EXPIRE 相似,可是它以毫秒爲單位設置 key 的生存時間 |
PEXPIREAT |
同EXPIREAT相似,可是它以毫秒爲單位設置 key 的生存時間 |
PTTL |
同TTL相似,可是它以毫秒爲單位返回key的剩餘生存時間 |
RANDOMKEY |
從當前數據庫中隨機返回(不刪除)一個 key 。 |
RENAME |
將 key 更名爲 newkey 。 |
RENAMENX |
當且僅當 newkey 不存在時,將 key 更名爲 newkey 。 |
RESTORE |
反序列化給定的序列化值,並將它和給定的 key 關聯。 |
SORT |
返回或保存給定列表、集合、有序集合 key 中通過排序的元素。 |
TTL |
以秒爲單位,返回給定 key 的剩餘生存時間(TTL, time to live)。 |
TYPE |
返回 key 所儲存的值的類型。 |
SCAN |
增量迭代 |
刪除給定的一個或多個 key ,不存在的 key 會被忽略。
q 刪除單個key
10.0.0.16:6379> SET name liutao OK 10.0.0.16:6379> DEL name (integer) 1
q 刪除一個不存在的key
10.0.0.16:6379> EXISTS hehe (integer) 0 10.0.0.16:6379> DEL hehe #<==失敗,沒有key被刪除 (integer) 0
q 同時刪除多個key
10.0.0.16:6379> SET name "redis" OK 10.0.0.16:6379> SET type "key-value store" OK 10.0.0.16:6379> SET website "redis.com" OK 10.0.0.16:6379> DEL name type website (integer) 3
檢查給定 key 是否存在。若 key 存在,返回 1 ,不然返回 0 。
10.0.0.16:6379> SET db "redis" OK 10.0.0.16:6379> EXISTS db (integer) 1 10.0.0.16:6379> DEL db (integer) 1 10.0.0.16:6379> EXISTS db (integer) 0
EXPIRE key seconds
爲給定 key 設置生存時間,當 key 過時時(生存時間爲 0 ),它會被自動刪除。在 Redis 中,帶有生存時間的 key 被稱爲『易失的』(volatile)。使用 PERSIST 命令能夠在不刪除 key 的狀況下,移除 key 的生存時間,讓 key 從新成爲一個『持久的』(persistent) key 。
10.0.0.16:6379> SET cache_page "www.google.com" OK 10.0.0.16:6379> EXPIRE cache_page 30 (integer) 1 10.0.0.16:6379> TTL cache_page (integer) 26 10.0.0.16:6379> EXPIRE cache_page 3000 (integer) 1 10.0.0.16:6379> TTL cache_page (integer) 2999 10.0.0.16:6379> PERSIST cache_page (integer) 1 10.0.0.16:6379> TTL cache_page (integer) -1
KEYS pattern,查詢符合給定模式pattern的key。
KEYS * :匹配數據庫中全部的key;
KEYS h?llo :匹配 hello , hallo 和 hxllo 等。
KEYS h*llo :匹配 hllo 和 heeeeello 等。
KEYS h[ae]llo :匹配 hello 和 hallo ,但不匹配 hillo 。
注:KEYS 的速度很是快,但在一個大的數據庫中使用它仍然可能形成性能問題,若是你須要從一個數據集中查找特定的 key ,你最好仍是用 Redis 的集合結構(set)來代替。
10.0.0.16:6379> MSET one 1 two 2 three 3 four 4 OK 10.0.0.16:6379> KEYS *o* 1) "four" 2) "two" 3) "one" 10.0.0.16:6379> KEYS t?? 1) "two" 10.0.0.16:6379> KEYS t???? 1) "three" 10.0.0.16:6379> KEYS t[w]* 1) "two" 10.0.0.16:6379> KEYS * 1) "three" 2) "four" 3) "two" 4) "one" 5) "greeting" 6) "cache_page"
MIGRATE host port key destination-db timeout [COPY] [REPLACE]
將 key 原子性地從當前實例傳送到目標實例的指定數據庫上,一旦傳送成功, key 保證會出如今目標實例上,而當前實例上的 key 會被刪除。這個命令是一個原子操做,它在執行的時候會阻塞進行遷移的兩個實例,直到如下任意結果發生:遷移成功,遷移失敗,等待超時。
命令的內部實現是這樣的:它在當前實例對給定 key 執行 DUMP 命令 ,將它序列化,而後傳送到目標實例,目標實例再使用 RESTORE對數據進行反序列化,並將反序列化所得的數據添加到數據庫中;當前實例就像目標實例的客戶端那樣,只要看到 RESTORE 命令返回 OK ,它就會調用 DEL 刪除本身數據庫上的 key 。
timeout 參數以毫秒爲格式,指定當前實例和目標實例進行溝通的最大間隔時間。這說明操做並不必定要在 timeout 毫秒內完成,只是說數據傳送的時間不能超過這個 timeout 數。
MIGRATE 命令須要在給定的時間規定內完成 IO 操做。若是在傳送數據時發生 IO 錯誤,或者達到了超時時間,那麼命令會中止執行,並返回一個特殊的錯誤: IOERR 。當 IOERR 出現時,有如下兩種可能:
1)key 可能存在於兩個實例
2)key 可能只存在於當前實例
惟一不可能發生的狀況就是丟失 key ,所以,若是一個客戶端執行 MIGRATE 命令,而且不幸趕上 IOERR 錯誤,那麼這個客戶端惟一要作的就是檢查本身數據庫上的 key 是否已經被正確地刪除。若是有其餘錯誤發生,那麼 MIGRATE 保證 key 只會出如今當前實例中。(固然,目標實例的給定數據庫上可能有和 key 同名的鍵,不過這和 MIGRATE 命令沒有關係)。
可選項:
COPY :不移除源實例上的 key 。
REPLACE :替換目標實例上已存在的 key 。
在10.0.0.16上操做:
10.0.0.16:6379> flushdb OK 10.0.0.16:6379> keys * (empty list or set) 10.0.0.16:6379> clear 10.0.0.16:6379> SET greeting "Hellp from 10.0.0.16 6379 instance" OK 10.0.0.16:6379> MIGRATE 10.0.0.11 6379 greeting 0 1000 OK 10.0.0.16:6379> EXISTS greeting (integer) 0
在10.0.0.11上操做:
10.0.0.11:6379> keys * 1) "greeting" 10.0.0.11:6379> get greeting "Hellp from 10.0.0.16 6379 instance"
返回key所存儲的值的類型
返回值:
none(key不存在)
string (字符串)
list (列表)
set (集合)
zset (有序集)
hash (哈希表)
10.0.0.16:6379> SET weather "sunny" OK 10.0.0.16:6379> TYPE weather string 10.0.0.16:6379> LPUSH book_list "programming in scala" (integer) 1 10.0.0.16:6379> TYPE book_list list 10.0.0.16:6379> SADD pat "dog" (integer) 1 10.0.0.16:6379> TYPE pat set
命令 |
命令說明 |
APPEND |
將 value 追加到 key 原來的值的末尾 |
STRLEN |
返回 key 所儲存的字符串值的長度 |
INCR |
將 key 中儲存的數字值增一 |
INCRBY |
將 key 所儲存的值加上增量 increment |
DECR |
將 key 中儲存的數字值減一 |
DECRBY |
將 key 所儲存的值減去減量 decrement |
GET |
返回 key 所關聯的字符串值 |
GETRANGE |
返回 key 中字符串值的子字符串 |
MGET |
返回全部(一個或多個)給定 key 的值 |
MSET |
同時設置一個或多個 key-value 對。 |
若是 key 已經存在而且是一個字符串, APPEND 命令將 value 追加到 key 原來的值的末尾。
若是 key 不存在, APPEND 就簡單地將給定 key 設爲 value ,就像執行 SET key value 同樣。
10.0.0.16:6379> EXISTS myphone (integer) 0 10.0.0.16:6379> APPEND myphone "nokia" (integer) 5 10.0.0.16:6379> APPEND myphone "- 1110" (integer) 11 10.0.0.16:6379> GET myphone "nokia- 1110"
DECR key
將 key 中儲存的數字值減一。
若是 key 不存在,那麼 key 的值會先被初始化爲 0 ,而後再執行 DECR 操做。
若是值包含錯誤的類型,或字符串類型的值不能表示爲數字,那麼返回一個錯誤。
本操做的值限制在 64 位(bit)有符號數字表示以內。
10.0.0.16:6379> SET failure_times 10 OK 10.0.0.16:6379> DECR failure_times (integer) 9 10.0.0.16:6379> DECR failure_times (integer) 8 10.0.0.16:6379> EXISTS count (integer) 0 10.0.0.16:6379> DECR count (integer) -1 10.0.0.16:6379> set company YOUR_CODE_SUCKS.LIC OK 10.0.0.16:6379> DECR company (error) ERR value is not an integer or out of range
DECR key decrement
將 key 中儲存的數字值減去減量decrement。
若是 key 不存在,那麼 key 的值會先被初始化爲 0 ,而後再執行 DECRBY操做。
若是值包含錯誤的類型,或字符串類型的值不能表示爲數字,那麼返回一個錯誤。
本操做的值限制在 64 位(bit)有符號數字表示以內。
10.0.0.16:6379> SET count 100 OK 10.0.0.16:6379> DECRBY count 20 (integer) 80 10.0.0.16:6379> EXISTS pages (integer) 0 10.0.0.16:6379> DECRBY pages 10 (integer) -10
GET key
返回 key 所關聯的字符串值。
若是 key 不存在那麼返回特殊值 nil 。
假如 key 儲存的值不是字符串類型,返回一個錯誤,由於 GET 只能用於處理字符串值。
10.0.0.16:6379> GET db (nil) 10.0.0.16:6379> SET db redis OK 10.0.0.16:6379> GET db "redis" 10.0.0.16:6379> DEL db (integer) 1 10.0.0.16:6379> LPUSH db redis mongdb mysql (integer) 3 10.0.0.16:6379> GET db (error) WRONGTYPE Operation against a key holding the wrong kind of value
GETRANGE key start end
返回 key 中字符串值的子字符串,字符串的截取範圍由 start 和 end 兩個偏移量決定(包括 start 和 end 在內)。
負數偏移量表示從字符串最後開始計數, -1 表示最後一個字符, -2 表示倒數第二個,以此類推。
GETRANGE 經過保證子字符串的值域(range)不超過實際字符串的值域來處理超出範圍的值域請求。
10.0.0.16:6379> SET greeting "hello, my friend" OK 10.0.0.16:6379> GETRANGE greeting 0 4 "hello" 10.0.0.16:6379> GETRANGE greeting -1 -5 #<==不支持迴繞操做 "" 10.0.0.16:6379> GETRANGE greeting -5 -1 "riend" 10.0.0.16:6379> GETRANGE greeting 0 -1 "hello, my friend"
INCR key
將 key 中儲存的數字值增一。
若是 key 不存在,那麼 key 的值會先被初始化爲 0 ,而後再執行 INCR 操做。
若是值包含錯誤的類型,或字符串類型的值不能表示爲數字,那麼返回一個錯誤。
本操做的值限制在 64 位(bit)有符號數字表示以內。
10.0.0.16:6379> SET page_view 20 OK 10.0.0.16:6379> INCR page_view (integer) 21 10.0.0.16:6379> INCR page_view (integer) 22 10.0.0.16:6379> GET page_view "22"
INCRBY key increment
將 key 所儲存的值加上增量 increment 。
若是 key 不存在,那麼 key 的值會先被初始化爲 0 ,而後再執行 INCRBY 命令。
若是值包含錯誤的類型,或字符串類型的值不能表示爲數字,那麼返回一個錯誤。
本操做的值限制在 64 位(bit)有符號數字表示以內。
10.0.0.16:6379> SET rank 50 OK 10.0.0.16:6379> INCRBY rank 20 (integer) 70 10.0.0.16:6379> GET rank "70" 10.0.0.16:6379> EXISTS counter (integer) 0 10.0.0.16:6379> INCRBY counter 20 (integer) 20 10.0.0.16:6379> GET counter "20" 10.0.0.16:6379> SET book "long long ago..." OK 10.0.0.16:6379> INCRBY book 20 (error) ERR value is not an integer or out of range
MGET key [key ...]
返回全部(一個或多個)給定 key 的值。
若是給定的 key 裏面,有某個 key 不存在,那麼這個 key 返回特殊值 nil 。所以,該命令永不失敗。
10.0.0.16:6379> SET redis redis.com OK 10.0.0.16:6379> SET mongodb mongodb.org OK 10.0.0.16:6379> MGET redis mongodb 1) "redis.com" 2) "mongodb.org" 10.0.0.16:6379> MGET redis mongodb mysql 1) "redis.com" 2) "mongodb.org" 3) (nil)
MSET key value [key value ...]
同時設置一個或多個 key-value 對。
若是某個給定 key 已經存在,那麼 MSET 會用新值覆蓋原來的舊值,若是這不是你所但願的效果,請考慮使用 MSETNX 命令:它只會在全部給定 key 都不存在的狀況下進行設置操做。
MSET 是一個原子性(atomic)操做,全部給定 key 都會在同一時間內被設置,某些給定 key 被更新而另外一些給定 key 沒有改變的狀況,不可能發生。
10.0.0.16:6379> MSET date "2012.3.30" time "11:00 a.m." weather "sunny" OK 10.0.0.16:6379> MGET date time weather 1) "2012.3.30" 2) "11:00 a.m." 3) "sunny" 10.0.0.16:6379> SET google "google.hk" OK 10.0.0.16:6379> MSET google "google.com" OK 10.0.0.16:6379> GET google "google.com"
STRLEN key
返回 key 所儲存的字符串值的長度。
當 key 儲存的不是字符串值時,返回一個錯誤。
10.0.0.16:6379> SET mykey "Hello World" OK 10.0.0.16:6379> STRLEN mykey (integer) 11 10.0.0.16:6379> STRLEN nonexisting (integer) 0
命令 |
命令說明 |
HDEL |
刪除哈希表 key 中的一個或多個指定域,不存在的域將被忽略 |
HEXISTS |
查看哈希表 key 中,給定域 field 是否存在 |
HGET |
返回哈希表 key 中給定域 field 的值 |
HGETALL |
返回哈希表 key 中,全部的域和值。 |
HINCRBY |
爲哈希表 key 中的域 field 的值加上增量 increment |
HKEYS |
返回哈希表 key 中的全部域 |
HMGET |
返回哈希表 key 中,一個或多個給定域的值 |
HMSET |
同時將多個 field-value (域-值)對設置到哈希表 key 中 |
HSET |
將哈希表 key 中的域 field 的值設爲 value |
HSETNX |
將哈希表 key 中的域 field 的值設置爲 value ,當且僅當域 field 不存在 |
HVALS |
返回哈希表 key 中全部域的值 |
HDEL key field [field ...]
刪除哈希表 key 中的一個或多個指定域,不存在的域將被忽略。
10.0.0.16:6379> HMSET abbr a apple b banana c cat d dog OK 10.0.0.16:6379> HGETALL abbr 1) "a" 2) "apple" 3) "b" 4) "banana" 5) "c" 6) "cat" 7) "d" 8) "dog" 10.0.0.16:6379> HDEL abbr a (integer) 1 10.0.0.16:6379> HDEL abbr not-exists-field (integer) 0 10.0.0.16:6379> HDEL abbr b c (integer) 2 10.0.0.16:6379> HGETALL abbr 1) "d" 2) "dog"
HEXISTS key field
查看哈希表 key 中,給定域 field 是否存在。
10.0.0.16:6379> HEXISTS phone myphone (integer) 0 10.0.0.16:6379> HSET phone myphone nokia-1110 (integer) 1 10.0.0.16:6379> HEXISTS phone myphone (integer) 1
HGET key field
返回哈希表 key 中給定域 field 的值。
10.0.0.16:6379> HSET site redis redis.com (integer) 1 10.0.0.16:6379> HGET site redis "redis.com" 10.0.0.16:6379> HGET site mysql (nil)
HGETALL key
返回哈希表 key 中,全部的域和值。
在返回值裏,緊跟每一個域名(field name)以後是域的值(value),因此返回值的長度是哈希表大小的兩倍。
10.0.0.16:6379> HMSET people jacak "Jack Sparrow" gump "Forrest Gump" OK 10.0.0.16:6379> HGETALL people 1) "jacak" 2) "Jack Sparrow" 3) "gump" 4) "Forrest Gump"
HINCRBY key field increment
爲哈希表 key 中的域 field 的值加上增量 increment 。
增量也能夠爲負數,至關於對給定域進行減法操做。
若是 key 不存在,一個新的哈希表被建立並執行 HINCRBY 命令。
若是域 field 不存在,那麼在執行命令前,域的值被初始化爲 0 。
對一個儲存字符串值的域 field 執行 HINCRBY 命令將形成一個錯誤。
本操做的值被限制在 64 位(bit)有符號數字表示以內。
# increment 爲正數 redis> HEXISTS counter page_view # 對空域進行設置 (integer) 0 redis> HINCRBY counter page_view 200 (integer) 200 redis> HGET counter page_view "200" # increment 爲負數 redis> HGET counter page_view "200" redis> HINCRBY counter page_view -50 (integer) 150 redis> HGET counter page_view "150" # 嘗試對字符串值的域執行HINCRBY命令 redis> HSET myhash string hello,world # 設定一個字符串值 (integer) 1 redis> HGET myhash string "hello,world" redis> HINCRBY myhash string 1 # 命令執行失敗,錯誤。 (error) ERR hash value is not an integer redis> HGET myhash string # 原值不變 "hello,world"
HKEYS key
返回哈希表 key 中的全部域。
# 哈希表非空 redis> HMSET website google www.google.com yahoo www.yahoo.com OK redis> HKEYS website 1) "google" 2) "yahoo" # 空哈希表/key不存在 redis> EXISTS fake_key (integer) 0 redis> HKEYS fake_key (empty list or set)
HMGET key field [field ...]
返回哈希表 key 中,一個或多個給定域的值。
若是給定的域不存在於哈希表,那麼返回一個 nil 值。
由於不存在的 key 被看成一個空哈希表來處理,因此對一個不存在的 key 進行 HMGET 操做將返回一個只帶有 nil 值的表。
redis> HMSET pet dog "doudou" cat "nounou" # 一次設置多個域 OK redis> HMGET pet dog cat fake_pet # 返回值的順序和傳入參數的順序同樣 1) "doudou" 2) "nounou" 3) (nil) # 不存在的域返回nil值
HMSET key field value [field value ...]
同時將多個 field-value (域-值)對設置到哈希表 key 中。
此命令會覆蓋哈希表中已存在的域。
若是 key 不存在,一個空哈希表被建立並執行 HMSET 操做。
redis> HMSET website google www.google.com yahoo www.yahoo.com OK redis> HGET website google "www.google.com" redis> HGET website yahoo www.yahoo.com
HSET key field value
將哈希表 key 中的域 field 的值設爲 value 。
若是 key 不存在,一個新的哈希表被建立並進行 HSET 操做。
若是域 field 已經存在於哈希表中,舊值將被覆蓋。
redis> HSET website google "www.g.cn" # 設置一個新域 (integer) 1 redis> HSET website google "www.google.com" # 覆蓋一箇舊域 (integer) 0
HVALS key
返回哈希表 key 中全部域的值。
# 非空哈希表 redis> HMSET website google www.google.com yahoo www.yahoo.com OK redis> HVALS website 1) "www.google.com" 2) "www.yahoo.com" # 空哈希表/不存在的key redis> EXISTS not_exists (integer) 0 redis> HVALS not_exists (empty list or set)
命令 |
命令說明 |
LINDEX |
返回列表 key 中,下標爲 index 的元素 |
LINSERT |
將值 value 插入到列表 key 當中,位於值 pivot 以前或以後 |
LPOP |
移除並返回列表 key 的頭元素 |
LPUSH |
將一個或多個值 value 插入到列表 key 的表頭 |
RPOP |
移除並返回列表 key 的尾元素 |
RPUSH |
將一個或多個值 value 插入到列表 key 的表尾(最右邊) |
LINDEX key index
返回列表 key 中,下標爲 index 的元素。
下標(index)參數 start 和 stop 都以 0 爲底,也就是說,以 0 表示列表的第一個元素,以 1 表示列表的第二個元素,以此類推。
你也可使用負數下標,以 -1 表示列表的最後一個元素, -2 表示列表的倒數第二個元素,以此類推。
若是 key 不是列表類型,返回一個錯誤。
redis> LPUSH mylist "World" (integer) 1 redis> LPUSH mylist "Hello" (integer) 2 redis> LINDEX mylist 0 "Hello" redis> LINDEX mylist -1 "World" redis> LINDEX mylist 3 # index不在 mylist 的區間範圍內 (nil)
LINSERT key BEFORE|AFTER pivot value
將值 value 插入到列表 key 當中,位於值 pivot 以前或以後。
當 pivot 不存在於列表 key 時,不執行任何操做。
當 key 不存在時, key 被視爲空列表,不執行任何操做。
若是 key 不是列表類型,返回一個錯誤。
redis> RPUSH mylist "Hello" (integer) 1 redis> RPUSH mylist "World" (integer) 2 redis> LINSERT mylist BEFORE "World" "There" (integer) 3 redis> LRANGE mylist 0 -1 1) "Hello" 2) "There" 3) "World" # 對一個非空列表插入,查找一個不存在的 pivot redis> LINSERT mylist BEFORE "go" "let's" (integer) -1 # 失敗 # 對一個空列表執行 LINSERT 命令 redis> EXISTS fake_list (integer) 0 redis> LINSERT fake_list BEFORE "nono" "gogogog" (integer) 0 # 失敗
LPOP key
移除並返回列表 key 的頭元素。
redis> LLEN course (integer) 0 redis> RPUSH course algorithm001 (integer) 1 redis> RPUSH course c++101 (integer) 2 redis> LPOP course # 移除頭元素 "algorithm001"
LPUSH key value [value ...]
將一個或多個值 value 插入到列表 key 的表頭
若是有多個 value 值,那麼各個 value 值按從左到右的順序依次插入到表頭: 好比說,對空列表 mylist 執行命令 LPUSH mylist a b c ,列表的值將是 c b a ,這等同於原子性地執行 LPUSH mylist a 、 LPUSH mylist b 和 LPUSH mylist c 三個命令。
若是 key 不存在,一個空列表會被建立並執行 LPUSH 操做。
當 key 存在但不是列表類型時,返回一個錯誤。
# 加入單個元素 redis> LPUSH languages python (integer) 1 # 加入重複元素 redis> LPUSH languages python (integer) 2 redis> LRANGE languages 0 -1 # 列表容許重複元素 1) "python" 2) "python" # 加入多個元素 redis> LPUSH mylist a b c (integer) 3 redis> LRANGE mylist 0 -1 1) "c" 2) "b" 3) "a"
RPOP key
移除並返回列表 key 的尾元素。
redis> RPUSH mylist "one" (integer) 1 redis> RPUSH mylist "two" (integer) 2 redis> RPUSH mylist "three" (integer) 3 redis> RPOP mylist # 返回被彈出的元素 "three" redis> LRANGE mylist 0 -1 # 列表剩下的元素 1) "one" 2) "two"
RPUSH key value [value ...]
將一個或多個值 value 插入到列表 key 的表尾(最右邊)。
若是有多個 value 值,那麼各個 value 值按從左到右的順序依次插入到表尾:好比對一個空列表 mylist 執行 RPUSH mylist a b c ,得出的結果列表爲 a b c ,等同於執行命令 RPUSH mylist a 、 RPUSH mylist b 、 RPUSH mylist c 。
若是 key 不存在,一個空列表會被建立並執行 RPUSH 操做。
當 key 存在但不是列表類型時,返回一個錯誤。
# 添加單個元素 redis> RPUSH languages c (integer) 1 # 添加劇復元素 redis> RPUSH languages c (integer) 2 redis> LRANGE languages 0 -1 # 列表容許重複元素 1) "c" 2) "c" # 添加多個元素 redis> RPUSH mylist a b c (integer) 3 redis> LRANGE mylist 0 -1 1) "a" 2) "b" 3) "c"
命令 |
命令說明 |
SADD |
將一個或多個 member 元素加入到集合 key 當中,已經存在於集合的 member 元素將被忽略 |
SCARD |
返回集合 key 的基數(集合中元素的數量) |
SDIFF |
返回一個集合的所有成員,該集合是全部給定集合之間的差集 |
SISMEMBER |
判斷 member 元素是否集合 key 的成員 |
SMEMBERS |
返回集合 key 中的全部成員 |
SMOVE |
將 member 元素從 source 集合移動到 destination 集合 |
SREM |
移除集合中的一個或多個 member 元素,不存在的 member 元素會被忽略 |
SUNION |
返回一個集合的所有成員,該集合是全部給定集合的並集 |
SADD key member [member ...]
將一個或多個 member 元素加入到集合 key 當中,已經存在於集合的 member 元素將被忽略。
假如 key 不存在,則建立一個只包含 member 元素做成員的集合。
當 key 不是集合類型時,返回一個錯誤。
# 添加單個元素 redis> SADD bbs "discuz.net" (integer) 1 # 添加劇復元素 redis> SADD bbs "discuz.net" (integer) 0 # 添加多個元素 redis> SADD bbs "tianya.cn" "groups.google.com" (integer) 2 redis> SMEMBERS bbs 1) "discuz.net" 2) "groups.google.com" 3) "tianya.cn"
SCARD key
返回集合 key 的基數(集合中元素的數量)。
redis> SADD tool pc printer phone (integer) 3 redis> SCARD tool # 非空集合 (integer) 3 redis> DEL tool (integer) 1 redis> SCARD tool # 空集合 (integer) 0
SDIFF key [key ...]
返回一個集合的所有成員,該集合是全部給定集合之間的差集。
不存在的 key 被視爲空集。
redis> SMEMBERS peter's_movies 1) "bet man" 2) "start war" 3) "2012" redis> SMEMBERS joe's_movies 1) "hi, lady" 2) "Fast Five" 3) "2012" redis> SDIFF peter's_movies joe's_movies 1) "bet man" 2) "start war"
SISMEMBER key member
判斷 member 元素是否集合 key 的成員。
若是 member 元素是集合的成員,返回 1 。
若是 member 元素不是集合的成員,或 key 不存在,返回 0 。
redis> SMEMBERS joe's_movies 1) "hi, lady" 2) "Fast Five" 3) "2012" redis> SISMEMBER joe's_movies "bet man" (integer) 0 redis> SISMEMBER joe's_movies "Fast Five" (integer) 1
SMEMBERS key
返回集合 key 中的全部成員。
不存在的 key 被視爲空集合。
# key 不存在或集合爲空 redis> EXISTS not_exists_key (integer) 0 redis> SMEMBERS not_exists_key (empty list or set) # 非空集合 redis> SADD language Ruby Python Clojure (integer) 3 redis> SMEMBERS language 1) "Python" 2) "Ruby" 3) "Clojure"
SMOVE source destination member
將 member 元素從 source 集合移動到 destination 集合。
SMOVE 是原子性操做。
若是 source 集合不存在或不包含指定的 member 元素,則 SMOVE 命令不執行任何操做,僅返回 0 。不然, member 元素從 source 集合中被移除,並添加到 destination 集合中去。
當 destination 集合已經包含 member 元素時, SMOVE 命令只是簡單地將 source 集合中的 member 元素刪除。
當 source 或 destination 不是集合類型時,返回一個錯誤。
redis> SMEMBERS songs 1) "Billie Jean" 2) "Believe Me" redis> SMEMBERS my_songs (empty list or set) redis> SMOVE songs my_songs "Believe Me" (integer) 1 redis> SMEMBERS songs 1) "Billie Jean" redis> SMEMBERS my_songs 1) "Believe Me"
SREM key member [member ...]
移除集合 key 中的一個或多個 member 元素,不存在的 member 元素會被忽略。
當 key 不是集合類型,返回一個錯誤。
# 測試數據 redis> SMEMBERS languages 1) "c" 2) "lisp" 3) "python" 4) "ruby" # 移除單個元素 redis> SREM languages ruby (integer) 1 # 移除不存在元素 redis> SREM languages non-exists-language (integer) 0 # 移除多個元素 redis> SREM languages lisp python c (integer) 3 redis> SMEMBERS languages (empty list or set)
SUNION key [key ...]
返回一個集合的所有成員,該集合是全部給定集合的並集。
不存在的 key 被視爲空集。
redis> SMEMBERS songs 1) "Billie Jean" redis> SMEMBERS my_songs 1) "Believe Me" redis> SUNION songs my_songs 1) "Billie Jean" 2) "Believe Me"
詳細命令列表請查看官方幫助文檔:https://redis.io/commands