Redis常用基本型別之一,存入Redis的所有key都是字元型別,常用於儲存Session資訊
命令 | 含義 | 複雜度 |
set <key> <value> | 設定 key value | o (1) |
get <key> | 獲取 key 對應的 value 值 | o (1) |
del <key> | 刪除 key | o (1) |
setnx <key> <value> | key 不存在時建立 key | o (1) |
senxx <key> <value> | key 存在時更新 key 值 | o (1) |
incr <key> | 計數加操作 | o (1) |
decr <key> | 計數減操作 | o (1) |
mset <key> <value> <key> <value> <key> <value> | 批次設定 key value | o (n) |
mget <key> <key> <key> | 批次獲取 key 對應的 value 值 | o (n) |
SET key value [EX seconds] [PX milliseconds] [NX|XX]
可用版本: >= 1.0.0時間複雜度: O(1)將字串值
value
關聯到key
。如果
key
已經持有其他值,SET
就覆寫舊值, 無視型別。當
SET
命令對一個帶有生存時間(TTL)的鍵進行設定之後, 該鍵原有的 TTL 將被清除。可選引數
從 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
: 只在鍵已經存在時, 才對鍵進行設定操作。
127.0.0.1:6379> set key1 value1 #設定key value 值,無論是否存在都執行 OK 127.0.0.1:6379> type key1 #檢視key的資料型別 string 127.0.0.1:6379> set key2 value2 ex 3 #設定有效期為3s的key OK 127.0.0.1:6379> set key3 value3 nx #當key值不存在時建立key,相當於新增key OK 127.0.0.1:6379> set key3 value3 nx (nil) 127.0.0.1:6379> set key4 value4 xx #當key值存在時對key的值進行更新,相當於更新key (nil) 127.0.0.1:6379> set key4 value4 nx OK 127.0.0.1:6379> set key4 value_4 xx OK
127.0.0.1:6379> get key1 "value1" 127.0.0.1:6379> get key3 "value3"
127.0.0.1:6379> keys * 1) "key3" 2) "key2" 3) "key1" 127.0.0.1:6379> del key1 key2 (integer) 2 127.0.0.1:6379> keys * 1) "key3" 127.0.0.1:6379> del key3 (integer) 1 127.0.0.1:6379> keys * (empty list or set) 127.0.0.1:6379>
127.0.0.1:6379> mset key1 value1 key2 value2 key3 value3 OK
127.0.0.1:6379> mget key1 key2 key3 #獲取多個key對應的value值 1) "value1" 2) "value2" 3) "value3" 127.0.0.1:6379> keys ke* #獲取ke開頭的所有key 1) "key3" 2) "key2" 3) "key1" 127.0.0.1:6379> keys * #獲取所有key 1) "key3" 2) "key2" 3) "key1"
127.0.0.1:6379> append key1 " this is append" (integer) 21 127.0.0.1:6379> get key1 "value1 this is append" 127.0.0.1:6379>
127.0.0.1:6379> set key4 value4 OK 127.0.0.1:6379> getset key4 newdata4 "value4" 127.0.0.1:6379> get key4 "newdata4"
127.0.0.1:6379> set name janzen.qiu OK 127.0.0.1:6379> get name "janzen.qiu" 127.0.0.1:6379> strlen name (integer) 10 127.0.0.1:6379> set addr 深圳市¸ OK 127.0.0.1:6379> get addr "\xe6\xb7\xb1\xe5\x9c\xb3\xe5\xb8\x82\xb8\x82" 127.0.0.1:6379> strlen addr (integer) 11
127.0.0.1:6379> keys * 1) "key3" 2) "key4" 3) "name" 4) "addr" 5) "key2" 6) "key1" 127.0.0.1:6379> exists key (integer) 0 127.0.0.1:6379> exists key1 key2 (integer) 2
#TTL <key> 可以檢視key剩餘有效期單位為s,過期後的key會被自動刪除 #-1:表示永不過期,預設key的有效期都為永不過期 #-2:表示指定key不存在
127.0.0.1:6379> ttl keytemp (integer) 54 127.0.0.1:6379> ttl keytemp (integer) 52 127.0.0.1:6379> ttl keytemp (integer) 51 127.0.0.1:6379> ttl key1 (integer) -1 127.0.0.1:6379> ttl key (integer) -2 127.0.0.1:6379>
127.0.0.1:6379> ttl keytemp (integer) 196 127.0.0.1:6379> expire keytemp 800 #expire 命令結果為重置過期時間 (integer) 1 127.0.0.1:6379> ttl keytemp (integer) 799 127.0.0.1:6379> ttl keytemp (integer) 793 127.0.0.1:6379> expire keytemp 400 (integer) 1 127.0.0.1:6379> ttl keytemp (integer) 399 127.0.0.1:6379>
127.0.0.1:6379> ttl keytemp (integer) 333 127.0.0.1:6379> persist keytemp (integer) 1 127.0.0.1:6379> ttl keytemp (integer) -1
可利用INCR命令簇(INCR、INCRBY、INCRBYFLOAT)對可轉化為數值的字元型別進行加計算
INCR <key> :對可轉化為整形的字元進行遞增加1(效果等同於 INCRBY KEY 1),如果key不存在則初始化key為0後進行處理
INCRBY <key> <int>:對可轉化為整形的字元進行增加 int ,如果key不存在則初始化key為0後進行處理
INCRBYFLOAT <key> <float>:對可轉化為 整形或浮點數 的字元進行增加 float ,如果key不存在則初始化key為0後進行處理
127.0.0.1:6379> set num 100 OK
#遞增+1 127.0.0.1:6379> incr num (integer) 101 127.0.0.1:6379> incr num (integer) 102
#初始化key之後遞增+1 127.0.0.1:6379> incr num1 (integer) 1
#數值加計算 127.0.0.1:6379> incrby num 20 (integer) 122 127.0.0.1:6379> incrby num -15 (integer) 107
#初始化key後,進行加計算
127.0.0.1:6379> incrby num2 24 (integer) 24
#初始化key,進行浮點數加計算 127.0.0.1:6379> incrbyfloat numf 20.1 "20.1"
#浮點數加計算 127.0.0.1:6379> incrbyfloat numf 2.8 "22.9" 127.0.0.1:6379> incrbyfloat numf -3.4 "19.5" 127.0.0.1:6379> incrbyfloat numf -10 "9.5" 127.0.0.1:6379> incrbyfloat numf 20 "29.5"
可利用DECR命令簇(DECR、DECRBY)對可轉化為整形的字元型別進行加計算(不可處理浮點型內容)
DECR <key> :對可轉化為整形的字元進行遞減1(效果等同於 DECRBY KEY 1),如果key不存在則初始化key為0後進行處理
DECRBY <key> <int>:對可轉化為整形的字元減 int ,如果key不存在則初始化key為0後進行處理
#初始化key,進行遞減-1 127.0.0.1:6379> decr num3 (integer) -1
#遞減-1 127.0.0.1:6379> decr num3 (integer) -2
#初始化key,進行減計算 127.0.0.1:6379> decrby num4 20 (integer) -20 #減計算 127.0.0.1:6379> decrby num3 10 (integer) -12 127.0.0.1:6379> decrby num3 -20 (integer) 8 #不可處理浮點型內容 127.0.0.1:6379> get numf "29.5" 127.0.0.1:6379> decr numf (error) ERR value is not an integer or out of range 127.0.0.1:6379> decrby numf 10 (error) ERR value is not an integer or out of range
列表型別本質上是一個可雙向讀寫的的管道,頭部為左側,尾部為右側。一個列表最多可包含 2^32-1(4294967295)個元素,0為初始下標表示第一個元素,也可使用-1 表示最後一個元素的下標,元素值可以重複。
常用於紀錄檔和佇列場景。
列表特點:
- 有序性
- 元素可重複
- 左右雙向可操作
LPUSH key value [value …]
可用版本: >= 1.0.0
時間複雜度: O(1)
將一個或多個值
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
存在但不是列表型別時,返回一個錯誤。LPUSHX key value
可用版本: >= 2.2.0
時間複雜度: O(1)
將值
value
插入到列表key
的表頭,當且僅當key
存在並且是一個列表。和 LPUSH key value [value …] 命令相反,當
key
不存在時, LPUSHX 命令什麼也不做。
RPUSH key value [value …]
可用版本: >= 1.0.0時間複雜度: O(1)將一個或多個值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
存在但不是列表型別時,返回一個錯誤。RPUSHX key value
可用版本: >= 2.2.0時間複雜度: O(1)將值value
插入到列表key
的表尾,當且僅當key
存在並且是一個列表。和 RPUSH key value [value …] 命令相反,當key
不存在時, RPUSHX 命令什麼也不做。
127.0.0.1:6379> lpush list1 a b c d e (integer) 5 127.0.0.1:6379> rpush list2 a b c d e (integer) 5
127.0.0.1:6379> lpush list1 f (integer) 6
#從右邊新增元素,其餘元素將向左移動 127.0.0.1:6379> rpush list2 f (integer) 6
LLEN key
可用版本: >= 1.0.0時間複雜度: O(1)返回列表
key
的長度。如果
key
不存在,則key
被解釋為一個空列表,返回0
.如果
key
不是列表型別,返回一個錯誤。
127.0.0.1:6379> llen list1 (integer) 6 127.0.0.1:6379> llen list2 (integer) 6
LRANGE key start stop
可用版本: >= 1.0.0時間複雜度: O(S+N),S
為偏移量start
,N
為指定區間內元素的數量。返回列表
key
中指定區間內的元素,區間以偏移量start
和stop
指定。下標(index)引數
start
和stop
都以0
為底,也就是說,以0
表示列表的第一個元素,以1
表示列表的第二個元素,以此類推。你也可以使用負數下標,以
-1
表示列表的最後一個元素,-2
表示列表的倒數第二個元素,以此類推。LINDEX key index
可用版本: >= 1.0.0時間複雜度:O(N),N
為到達下標index
過程中經過的元素數量。因此,對列表的頭元素和尾元素執行 LINDEX 命令,複雜度為O(1)。返回列表
key
中,下標為index
的元素。下標(index)引數
start
和stop
都以0
為底,也就是說,以0
表示列表的第一個元素,以1
表示列表的第二個元素,以此類推。你也可以使用負數下標,以
-1
表示列表的最後一個元素,-2
表示列表的倒數第二個元素,以此類推。如果
key
不是列表型別,返回一個錯誤。
127.0.0.1:6379> rpush list a b c d e (integer) 5
#檢視單個指定位置的元素 127.0.0.1:6379> lindex list 0 "a" 127.0.0.1:6379> lindex list 1 "b" 127.0.0.1:6379> lindex list 2 "c" 127.0.0.1:6379> lindex list 3 "d" 127.0.0.1:6379> lindex list 4 "e"
#檢視指定範圍的元素 127.0.0.1:6379> lrange list 0 4 1) "a" 2) "b" 3) "c" 4) "d" 5) "e" 127.0.0.1:6379> lrange list 2 4 1) "c" 2) "d" 3) "e" 127.0.0.1:6379> lrange list 0 -1 #未知列表長度時,檢視所有元素 1) "a" 2) "b" 3) "c" 4) "d" 5) "e"
#起始下標位置必須位於結束下標左側 127.0.0.1:6379> lrange list -1 0 (empty list or set) 127.0.0.1:6379> lrange list -1 2 (empty list or set) 127.0.0.1:6379> lrange list 2 -5 (empty list or set)
LSET key index value
可用版本: >= 1.0.0時間複雜度:對頭元素或尾元素進行 LSET 操作,複雜度為 O(1)。其他情況下,為 O(N),N
為列表的長度。將列表
key
下標為index
的元素的值設定為value
。當
index
引數超出範圍,或對一個空列表(key
不存在)進行 LSET 時,返回一個錯誤。
127.0.0.1:6379> lrange list 0 -1 1) "a" 2) "b" 3) "c" 4) "d" 5) "e" 127.0.0.1:6379> lset list 2 n OK 127.0.0.1:6379> lrange list 0 -1 1) "a" 2) "b" 3) "n" 4) "d" 5) "e"
LPOP key
可用版本: >= 1.0.0
時間複雜度: O(1)移除並返回列表
key
的頭元素。
RPOP key
可用版本: >= 1.0.0
時間複雜度: O(1)
移除並返回列表
key
的尾元素。
127.0.0.1:6379> rpush list a b c d e (integer) 5 #刪除列表頭元素 127.0.0.1:6379> lrange list 0 -1 1) "a" 2) "b" 3) "c" 4) "d" 5) "e" 127.0.0.1:6379> lpop list "a" 127.0.0.1:6379> lrange list 0 -1 1) "b" 2) "c" 3) "d" 4) "e" #刪除列表尾元素 127.0.0.1:6379> lrange list 0 -1 1) "a" 2) "b" 3) "c" 4) "d" 5) "e" 127.0.0.1:6379> rpop list "e" 127.0.0.1:6379> lrange list 0 -1 1) "a" 2) "b" 3) "c" 4) "d"
LREM key count value
可用版本: >= 1.0.0時間複雜度: O(N),N
為列表的長度。根據引數
count
的值,移除列表中與引數value
相等的元素。
count
的值可以是以下幾種:
count > 0
: 從表頭開始向表尾搜尋,移除與value
相等的元素,數量為count
。
count < 0
: 從表尾開始向表頭搜尋,移除與value
相等的元素,數量為count
的絕對值。
count = 0
: 移除表中所有與value
相等的值。
127.0.0.1:6379> lrange list 0 -1 1) "a" 2) "b" 3) "c" 4) "c" 5) "a" 6) "d" 7) "e" 8) "a" 9) "b" 10) "a" 11) "e" 12) "c" 13) "c" 14) "c" 15) "b" 127.0.0.1:6379> lrem list -3 c #從列表尾部開始刪除3個為 c 的元素 (integer) 3 127.0.0.1:6379> lrange list 0 -1 1) "a" 2) "b" 3) "c" 4) "c" 5) "a" 6) "d" 7) "e" 8) "a" 9) "b" 10) "a" 11) "e" 12) "b" 127.0.0.1:6379> lrange list 0 -1 1) "a" 2) "b" 3) "c" 4) "c" 5) "a" 6) "d" 7) "e" 8) "a" 9) "b" 10) "a" 11) "e" 12) "b" 127.0.0.1:6379> lrem list 2 a #從列表頭部開始刪除2個為 a 的元素 (integer) 2 127.0.0.1:6379> lrange list 0 -1 1) "b" 2) "c" 3) "c" 4) "d" 5) "e" 6) "a" 7) "b" 8) "a" 9) "e" 10) "b" 127.0.0.1:6379> lrange list 0 -1 1) "b" 2) "c" 3) "c" 4) "d" 5) "e" 6) "a" 7) "b" 8) "a" 9) "e" 10) "b" 127.0.0.1:6379> lrem list 0 b #刪除列表中所有為 b 的元素 (integer) 3 127.0.0.1:6379> lrange list 0 -1 1) "c" 2) "c" 3) "d" 4) "e" 5) "a" 6) "a" 7) "e"
RPOPLPUSH source destination
可用版本: >= 1.2.0時間複雜度: O(1)命令 RPOPLPUSH 在一個原子時間內,執行以下兩個動作:
將列表
source
中的最後一個元素(尾元素)彈出,並返回給使用者端。將
source
彈出的元素插入到列表destination
,作為destination
列表的的頭元素。舉個例子,你有兩個列表
source
和destination
,source
列表有元素a, b, c
,destination
列表有元素x, y, z
,執行RPOPLPUSH source destination
之後,source
列表包含元素a, b
,destination
列表包含元素c, x, y, z
,並且元素c
會被返回給使用者端。如果
source
不存在,值nil
被返回,並且不執行其他動作。如果
source
和destination
相同,則列表中的表尾元素被移動到表頭,並返回該元素,可以把這種特殊情況視作列表的旋轉(rotation)操作。
# source destination 為兩個不同的列表
127.0.0.1:6379> lrange list1 0 -1 1) "a" 2) "b" 3) "c" 4) "d" 5) "e" 127.0.0.1:6379> lrange list2 0 -1 1) "a" 2) "b" 3) "c" 4) "d" 5) "e" 127.0.0.1:6379> rpoplpush list1 list2 "e" 127.0.0.1:6379> lrange list1 0 -1 1) "a" 2) "b" 3) "c" 4) "d" 127.0.0.1:6379> lrange list2 0 -1 1) "e" 2) "a" 3) "b" 4) "c" 5) "d" 6) "e"
#source destination 為同一個列表 127.0.0.1:6379> rpush list1 a b c d e (integer) 5 127.0.0.1:6379> lrange list1 0 -1 1) "a" 2) "b" 3) "c" 4) "d" 5) "e" 127.0.0.1:6379> rpoplpush list1 list1 "e" 127.0.0.1:6379> lrange list1 0 -1 1) "e" 2) "a" 3) "b" 4) "c" 5) "d"
#destination 列表不存在 127.0.0.1:6379> lrange list2 0 -1 1) "e" 2) "a" 3) "b" 4) "c" 5) "d" 6) "e" 127.0.0.1:6379> EXISTS list3 (integer) 0 127.0.0.1:6379> rpoplpush list2 list3 "e" 127.0.0.1:6379> lrange list2 0 -1 1) "e" 2) "a" 3) "b" 4) "c" 5) "d" 127.0.0.1:6379> lrange list3 0 -1 1) "e"
LTRIM key start stop
可用版本: >= 1.0.0時間複雜度: O(N),N
為被移除的元素的數量。對一個列表進行修剪(trim),就是說,讓列表只保留指定區間內的元素,不在指定區間之內的元素都將被刪除。
舉個例子,執行命令
LTRIM list 0 2
,表示只保留列表list
的前三個元素,其餘元素全部刪除。下標(index)引數
start
和stop
都以0
為底,也就是說,以0
表示列表的第一個元素,以1
表示列表的第二個元素,以此類推。你也可以使用負數下標,以
-1
表示列表的最後一個元素,-2
表示列表的倒數第二個元素,以此類推。當
key
不是列表型別時,返回一個錯誤。LTRIM 命令通常和 LPUSH key value [value …] 命令或 RPUSH key value [value …] 命令配合使用,舉個例子:
LPUSH log newest_log LTRIM log 0 99
這個例子模擬了一個紀錄檔程式,每次將最新紀錄檔
newest_log
放到log
列表中,並且只保留最新的100
項。注意當這樣使用LTRIM
命令時,時間複雜度是O(1),因為平均情況下,每次只有一個元素被移除。超出範圍的下標
超出範圍的下標值不會引起錯誤。
如果
start
下標比列表的最大下標end
(LLEN list
減去1
)還要大,或者start>stop
, LTRIM 返回一個空列表(因為 LTRIM 已經將整個列表清空)。如果
stop
下標比end
下標還要大,Redis將stop
的值設定為end
127.0.0.1:6379> lrange list 0 -1 1) "a" 2) "b" 3) "c" 4) "d" 5) "e" 127.0.0.1:6379> ltrim list 1 3 OK 127.0.0.1:6379> lrange list 0 -1 1) "b" 2) "c" 3) "d"
#起始下標大於end 127.0.0.1:6379> lrange list 0 -1 1) "b" 2) "c" 3) "d" 4) "a" 5) "b" 6) "c" 7) "d" 8) "e" 127.0.0.1:6379> ltrim list 8 10 OK 127.0.0.1:6379> lrange list 0 -1 (empty list or set) #終止下標大於起始下標 127.0.0.1:6379> lrange list 0 -1 1) "a" 2) "b" 3) "c" 4) "d" 5) "e" 127.0.0.1:6379> ltrim list 3 0 OK 127.0.0.1:6379> lrange list 0 -1 (empty list or set)
127.0.0.1:6379> rpush list a b c d e (integer) 5 127.0.0.1:6379> rpush list2 a b c d e (integer) 5 127.0.0.1:6379> keys * 1) "list" 2) "list2" 127.0.0.1:6379> del list (integer) 1 127.0.0.1:6379> del lisst2 (integer) 0 127.0.0.1:6379>
LINSERT key BEFORE|AFTER pivot value
可用版本: >= 2.2.0時間複雜度: O(N),N
為尋找pivot
過程中經過的元素數量。將值
value
插入到列表key
當中,位於值pivot
之前或之後。當
pivot
不存在於列表key
時,不執行任何操作。當
key
不存在時,key
被視為空列表,不執行任何操作。
127.0.0.1:6379> rpush list a b c d e (integer) 5 127.0.0.1:6379> LRANGE list 0 -1 1) "a" 2) "b" 3) "c" 4) "d" 5) "e" 127.0.0.1:6379> linsert list before d test (integer) 6 127.0.0.1:6379> LRANGE list 0 -1 1) "a" 2) "b" 3) "c" 4) "test" 5) "d" 6) "e" 127.0.0.1:6379> rpush list1 a b c d e (integer) 5 127.0.0.1:6379> LRANGE list1 0 -1 1) "a" 2) "b" 3) "c" 4) "d" 5) "e" 127.0.0.1:6379> linsert list after c test (integer) 7 127.0.0.1:6379> LRANGE list1 0 -1 1) "a" 2) "b" 3) "c" 4) "test" 5) "d" 6) "e" 127.0.0.1:6379>
集合Set 是字元String的無序集合,集合中的成員具有唯一性,可以在兩個不同的集合中進行比較取值,常用於取值判斷、統計、交集等場景,
集合特點:
- 無序性
- 元素唯一性
- 多集合處理
SADD key member [member …]
可用版本: >= 1.0.0時間複雜度: O(N),N
是被新增的元素的數量。將一個或多個
member
元素加入到集合key
當中,已經存在於集合的member
元素將被忽略。假如
key
不存在,則建立一個只包含member
元素作成員的集合
127.0.0.1:6379> sadd set1 item1 item2 item3 (integer) 3 127.0.0.1:6379> type set1 set
#追加集合內容是隻能追加集合中不存在的元素,已存在的元素將被忽略 127.0.0.1:6379> sadd set1 item3 item4 item5 (integer) 2
SMEMBERS key
可用版本: >= 1.0.0時間複雜度: O(N),N
為集合的基數。返回集合
key
中的所有成員。
127.0.0.1:6379> smembers set1 1) "item3" 2) "item2" 3) "item4" 4) "item1" 5) "item5"
SISMEMBER key member
可用版本: >= 1.0.0時間複雜度: O(1)判斷
member
元素是否集合key
的成員。返回值
如果
member
元素是集合的成員,返回1
。 如果member
元素不是集合的成員,或key
不存在,返回0
。
127.0.0.1:6379> smembers set1 1) "item2" 2) "item5" 3) "item1" 4) "item3" 5) "item4"
#item2元素存在於列表set1 127.0.0.1:6379> sismember set1 item2 (integer) 1
#item9元素不存在與列表set1 127.0.0.1:6379> sismember set1 item9 (integer) 0
SRANDMEMBER key [count]
可用版本: >= 1.0.0時間複雜度: 只提供key
引數時為 O(1) 。如果提供了count
引數,那麼為 O(N) ,N 為返回陣列的元素個數。如果命令執行時,只提供了
key
引數,那麼返回集合中的一個隨機元素。從 Redis 2.6 版本開始, SRANDMEMBER 命令接受可選的
count
引數:
如果
count
為正數,且小於集合基數,那麼命令返回一個包含count
個元素的陣列,陣列中的元素各不相同。如果count
大於等於集合基數,那麼返回整個集合。如果
count
為負數,那麼命令返回一個陣列,陣列中的元素可能會重複出現多次,而陣列的長度為count
的絕對值。該操作和 SPOP key 相似,但 SPOP key 將隨機元素從集合中移除並返回,而 SRANDMEMBER 則僅僅返回隨機元素,而不對集合進行任何改動。
返回值
只提供
key
引數時,返回一個元素;如果集合為空,返回nil
。 如果提供了count
引數,那麼返回一個陣列;如果集合為空,返回空陣列。
127.0.0.1:6379> smembers set1 1) "item2" 2) "item5" 3) "item1" 4) "item3" 5) "item4"
#未輸入count值,預設隨機返回1個元素 127.0.0.1:6379> srandmember set1 "item4"
#count<0,返回3個元素,允許出現重複值 127.0.0.1:6379> srandmember set1 -3 1) "item4" 2) "item3" 3) "item4"
#count>0,返回3個元素,結果允許出現重複值 127.0.0.1:6379> srandmember set1 3 1) "item2" 2) "item5" 3) "item3"
#count 大於列表中的元素個數,返回當前列表 127.0.0.1:6379> srandmember set1 9 1) "item3" 2) "item2" 3) "item5" 4) "item1" 5) "item4"
SCARD key
可用版本: >= 1.0.0時間複雜度: O(1)返回集合
key
的基數(集合中元素的數量)。返回值
集合的基數。 當
key
不存在時,返回0
127.0.0.1:6379> smembers set1 1) "item2" 2) "item5" 3) "item1" 4) "item3" 5) "item4" 127.0.0.1:6379> smembers set2 1) "item2" 2) "item9" 3) "item7" 4) "item1" 5) "item6" 6) "item4" 127.0.0.1:6379> scard set1 (integer) 5 127.0.0.1:6379> scard set2 (integer) 6
SSCAN cursor [MATCH pattern] [COUNT count]
可用版本: >= 2.8.0時間複雜度:增量式迭代命令每次執行的複雜度為 O(1) , 對資料集進行一次完整迭代的複雜度為 O(N) , 其中 N 為資料集中的元素數量。
SCAN
命令及其相關的SSCAN
命令、HSCAN
命令和ZSCAN
命令都用於增量地迭代(incrementally iterate)一集元素(a collection of elements)
127.0.0.1:6379> smembers set1 1) "item5" 2) "item1" 3) "item231" 4) "item132" 5) "item3" 6) "item13" 7) "item4" 8) "item2" 9) "item121" 10) "item81" #使用sscan篩選集合內元素 127.0.0.1:6379> sscan set1 0 match item?? 1) "7" 2) 1) "item81" 2) "item13" 127.0.0.1:6379> sscan set1 0 match item??? 1) "7" 2) 1) "item231" 2) "item132" 3) "item121" 127.0.0.1:6379> sscan set1 0 match item??1 1) "7" 2) 1) "item231" 2) "item121" 127.0.0.1:6379> sscan set1 0 match item*1 1) "7" 2) 1) "item231" 2) "item121" 3) "item81" 4) "item1"
SREM key member [member …]
可用版本: >= 1.0.0時間複雜度: O(N),N
為給定member
元素的數量。移除集合
key
中的一個或多個member
元素,不存在的member
元素會被忽略。
127.0.0.1:6379> smembers set1 1) "item3" 2) "item2" 3) "item4" 4) "item1" 5) "item5" 127.0.0.1:6379> srem set1 item1 item2 (integer) 2 127.0.0.1:6379> smembers set1 1) "item5" 2) "item3" 3) "item4" #刪除不存在的元素,錯誤的元素會被忽略 127.0.0.1:6379> srem set1 item3 item6 item7 (integer) 1 127.0.0.1:6379> smembers set1 1) "item5" 2) "item4"
SPOP key
可用版本: >= 1.0.0時間複雜度: O(1)移除並返回集合中的一個隨機元素。
如果只想獲取一個隨機元素,但不想該元素從集合中被移除的話,可以使用 SRANDMEMBER key [count] 命令。
返回值
被移除的隨機元素。 當
key
不存在或key
是空集時,返回nil
。
127.0.0.1:6379> smembers set2 1) "item2" 2) "item9" 3) "item7" 4) "item1" 5) "item6" 6) "item4" 127.0.0.1:6379> spop set2 "item4" 127.0.0.1:6379> smembers set2 1) "item2" 2) "item9" 3) "item7" 4) "item1" 5) "item6" 127.0.0.1:6379> spop set2 "item6" 127.0.0.1:6379> smembers set2 1) "item2" 2) "item9" 3) "item7" 4) "item1"
SMOVE source destination member
可用版本: >= 1.0.0時間複雜度: O(1)將
member
元素從source
集合移動到destination
集合。SMOVE 是原子性操作。
如果
source
集合不存在或不包含指定的member
元素,則 SMOVE 命令不執行任何操作,僅返回0
。否則,member
元素從source
集合中被移除,並新增到destination
集合中去。當
destination
集合已經包含member
元素時, SMOVE 命令只是簡單地將source
集合中的member
元素刪除。當
source
或destination
不是集合型別時,返回一個錯誤。返回值
如果
member
元素被成功移除,返回1
。 如果member
元素不是source
集合的成員,並且沒有任何操作對destination
集合執行,那麼返回0
127.0.0.1:6379> smembers set1 1) "item3" 2) "item2" 3) "item4" 4) "item1" 5) "item5" 127.0.0.1:6379> smembers set2 1) "item4" 2) "item1" 3) "item9" 4) "item2" 5) "item7" 6) "item6" #destination不存在時,自動建立set3集合,並將item5新增至set3 127.0.0.1:6379> smove set1 set3 item5 (integer) 1 127.0.0.1:6379> smembers set1 1) "item4" 2) "item1" 3) "item2" 4) "item3" 127.0.0.1:6379> smembers set3 1) "item5" #item6不存在於source 127.0.0.1:6379> smove set1 set2 item6 (integer) 0 127.0.0.1:6379> smembers set1 1) "item1" 2) "item2" 3) "item5" 4) "item3" 5) "item4" 127.0.0.1:6379> smembers set2 1) "item4" 2) "item1" 3) "item9" 4) "item2" 5) "item7" 6) "item6" #將item5從set1 移動至 set2 127.0.0.1:6379> smove set1 set2 item5 (integer) 1 127.0.0.1:6379> smembers set1 1) "item2" 2) "item1" 3) "item3" 4) "item4" 127.0.0.1:6379> smembers set2 1) "item1" 2) "item9" 3) "item2" 4) "item5" 5) "item7" 6) "item6" 7) "item4" #item1 同時存在於set1 set2時,僅刪除 set1 中的 item1 127.0.0.1:6379> smembers set1 1) "item2" 2) "item5" 3) "item1" 4) "item3" 5) "item4" 127.0.0.1:6379> smembers set2 1) "item9" 2) "item2" 3) "item1" 4) "item7" 5) "item6" 6) "item4" 127.0.0.1:6379> smove set1 set2 item1 (integer) 1 127.0.0.1:6379> smembers set1 1) "item2" 2) "item5" 3) "item3" 4) "item4" 127.0.0.1:6379> smembers set2 1) "item9" 2) "item2" 3) "item1" 4) "item7" 5) "item6" 6) "item4"
SINTER key [key …]
可用版本: >= 1.0.0時間複雜度: O(N * M),N
為給定集合當中基數最小的集合,M
為給定集合的個數。返回一個集合的全部成員,該集合是所有給定集合的交集。
不存在的
key
被視為空集。當給定集合當中有一個空集時,結果也為空集(根據集合運算定律)。
127.0.0.1:6379> SMEMBERS set1 1) "item3" 2) "item2" 3) "item4" 4) "item1" 5) "item5" 127.0.0.1:6379> SMEMBERS set2 1) "item2" 2) "item9" 3) "item7" 4) "item1" 5) "item6" 6) "item4" 127.0.0.1:6379> sinter set1 set2 1) "item2" 2) "item4" 3) "item1"
SINTERSTORE destination key [key …]
可用版本: >= 1.0.0時間複雜度: O(N * M),N
為給定集合當中基數最小的集合,M
為給定集合的個數。這個命令類似於 SINTER key [key …] 命令,但它將結果儲存到
destination
集合,而不是簡單地返回結果集。如果
destination
集合已經存在,則將其覆蓋。
destination
可以是key
本身。
127.0.0.1:6379> SMEMBERS set1 1) "item3" 2) "item2" 3) "item4" 4) "item1" 5) "item5" 127.0.0.1:6379> SMEMBERS set2 1) "item2" 2) "item9" 3) "item7" 4) "item1" 5) "item6" 6) "item4" #將set1 與 set2 的交集儲存到 sinter_set 127.0.0.1:6379> sinterstore sinter_set set1 set2 (integer) 3 127.0.0.1:6379> SMEMBERS sinter_set 1) "item2" 2) "item4" 3) "item1"
SUNION key [key …]
可用版本: >= 1.0.0時間複雜度: O(N),N
是所有給定集合的成員數量之和。返回一個集合的全部成員,該集合是所有給定集合的並集。
不存在的
key
被視為空集。
127.0.0.1:6379> SMEMBERS set1 1) "item3" 2) "item2" 3) "item4" 4) "item1" 5) "item5" 127.0.0.1:6379> SMEMBERS set2 1) "item2" 2) "item9" 3) "item7" 4) "item1" 5) "item6" 6) "item4" 127.0.0.1:6379> sunion set1 set2 1) "item9" 2) "item2" 3) "item5" 4) "item7" 5) "item1" 6) "item6" 7) "item3" 8) "item4"
SUNIONSTORE destination key [key …]
可用版本: >= 1.0.0時間複雜度: O(N),N
是所有給定集合的成員數量之和。這個命令類似於 SUNION key [key …] 命令,但它將結果儲存到
destination
集合,而不是簡單地返回結果集。如果
destination
已經存在,則將其覆蓋。
destination
可以是key
本身
127.0.0.1:6379> SMEMBERS set1 1) "item3" 2) "item2" 3) "item4" 4) "item1" 5) "item5" 127.0.0.1:6379> SMEMBERS set2 1) "item2" 2) "item9" 3) "item7" 4) "item1" 5) "item6" 6) "item4" 127.0.0.1:6379> sunionstore sunion_set set1 set2 (integer) 8 127.0.0.1:6379> SMEMBERS sunion_set 1) "item9" 2) "item2" 3) "item5" 4) "item7" 5) "item1" 6) "item6" 7) "item3" 8) "item4"
SDIFF key [key …]
可用版本: >= 1.0.0時間複雜度: O(N),N
是所有給定集合的成員數量之和。返回一個集合的全部成員,該集合是所有給定集合之間的差集。
不存在的
key
被視為空集。
127.0.0.1:6379> SMEMBERS set2 1) "item2" 2) "item9" 3) "item7" 4) "item1" 5) "item6" 6) "item4" 127.0.0.1:6379> SMEMBERS set1 1) "item3" 2) "item2" 3) "item4" 4) "item1" 5) "item5" #set1 與 set2 的差值 127.0.0.1:6379> sdiff set1 set2 1) "item3" 2) "item5" #set2 與 set1 的差值 127.0.0.1:6379> sdiff set2 set1 1) "item6" 2) "item9" 3) "item7"
SDIFFSTORE destination key [key …]
可用版本: >= 1.0.0時間複雜度: O(N),N
是所有給定集合的成員數量之和。這個命令的作用和 SDIFF key [key …] 類似,但它將結果儲存到
destination
集合,而不是簡單地返回結果集。如果
destination
集合已經存在,則將其覆蓋。
destination
可以是key
本身
127.0.0.1:6379> SMEMBERS set1 1) "item2" 2) "item5" 3) "item1" 4) "item3" 5) "item4" 127.0.0.1:6379> SMEMBERS set2 1) "item2" 2) "item9" 3) "item7" 4) "item1" 5) "item6" 6) "item4"
#set1 與 set2 的差值結果儲存到 sdiff_set1 127.0.0.1:6379> sdiffstore sdiff_set1 set1 set2 (integer) 2 127.0.0.1:6379> SMEMBERS sdiff_set1 1) "item3" 2) "item5"
#set2 與 set1 的差值結果儲存到 sdiff_set2 127.0.0.1:6379> sdiffstore sdiff_set2 set2 set1 (integer) 3 127.0.0.1:6379> SMEMBERS sdiff_set2 1) "item6" 2) "item9" 3) "item7"
Sorted Set 有序集合也是一個由String字元型別元素組成的集合,且不允許內部元素value 重複出現。但是與Set集合不同的是,每個value元素都會關聯一個double(雙精度浮點型)型別的Score分散,Redis正是通過該Score分數為集合中的成員從小到大進行排序,有序集合成員value都是唯一的,但是Score分數允許出現重複情況。集合是通過雜湊表實現的,所以新增、刪除、查詢的複雜度都是O(1),集合中最大成員數為 2^32-1,每個集合可容納約40億個成員,常用於實現排行榜或者瀏覽量統計等場景。
有序集合特點:
- 有序性
- 元素唯一性
- 每個元素通過score進行排序
- value不可以重複,score可以重複
ZADD key score member [[score member] [score member] …]
可用版本: >= 1.2.0時間複雜度: O(M*log(N)),N
是有序集的基數,M
為成功新增的新成員的數量。將一個或多個
member
元素及其score
值加入到有序集key
當中。如果某個
member
已經是有序集的成員,那麼更新這個member
的score
值,並通過重新插入這個member
元素,來保證該member
在正確的位置上。
score
值可以是整數值或雙精度浮點數。如果
key
不存在,則建立一個空的有序集並執行 ZADD 操作。當
key
存在但不是有序集型別時,返回一個錯誤。
#新增一個元素到有序列表
127.0.0.1:6379> zadd zset1 100 centos (integer) 1
#新增多個元素包含已存在的元素到有序列表 127.0.0.1:6379> zadd zset1 150 centos 160 ubuntu 170 alpine 900 windows10 (integer) 3
#新增多個新元素到有序列表 127.0.0.1:6379> zadd zset1 90 windows7 198 windows11 (integer) 2 127.0.0.1:6379> type zset1 zset
ZRANGE key start stop [WITHSCORES]
可用版本: >= 1.2.0時間複雜度: O(log(N)+M),N
為有序集的基數,而M
為結果集的基數。返回有序集
key
中,指定區間內的成員。其中成員的位置按
score
值遞增(從小到大)來排序。具有相同
score
值的成員按字典序(lexicographical order )來排列。下標引數
start
和stop
都以0
為底,也就是說,以0
表示有序集第一個成員,以1
表示有序集第二個成員,以此類推。 你也可以使用負數下標,以-1
表示最後一個成員,-2
表示倒數第二個成員,以此類推。超出範圍的下標並不會引起錯誤。 比如說,當
start
的值比有序集的最大下標還要大,或是start > stop
時, ZRANGE 命令只是簡單地返回一個空列表。 另一方面,假如stop
引數的值比有序集的最大下標還要大,那麼 Redis 將stop
當作最大下標來處理。可以通過使用
WITHSCORES
選項,來讓成員和它的score
值一併返回,返回列表以value1,score1, ..., valueN,scoreN
的格式表示。 使用者端庫可能會返回一些更復雜的資料型別,比如陣列、元組等。
#根據元素score值從小到大遞增排序,並展示所有元素
127.0.0.1:6379> zrange zset1 0 -1 1) "windows7" 2) "centos" 3) "ubuntu" 4) "alpine" 5) "windows11" 6) "windows10" #根據元素score從小到大遞增排序,並展示從第4位元到最後一位的元素 127.0.0.1:6379> zrange zset1 3 -1 1) "alpine" 2) "windows11" 3) "windows10" #根據元素score從小到大遞減排序,並展示所有元素及score資訊 127.0.0.1:6379> zrange zset1 0 -1 withscores 1) "windows7" 2) "90" 3) "centos" 4) "150" 5) "ubuntu" 6) "160" 7) "alpine" 8) "170" 9) "windows11" 10) "198" 11) "windows10" 12) "900" #根據元素score從小到大遞增排序,並展示從第4位元到最後一位的元素及score資訊 127.0.0.1:6379> zrange zset1 3 -1 withscores 1) "alpine" 2) "170" 3) "windows11" 4) "198" 5) "windows10" 6) "900"
ZREVRANGE key start stop [WITHSCORES]
可用版本: >= 1.2.0時間複雜度: O(log(N)+M),N
為有序集的基數,而M
為結果集的基數。返回有序集
key
中,指定區間內的成員。其中成員的位置按
score
值遞減(從大到小)來排列。 具有相同score
值的成員按字典序的逆序(reverse lexicographical order)排列。
#根據score從大到小遞減排序,並展示所有元素 127.0.0.1:6379> zrevrange zset1 0 -1 1) "windows10" 2) "windows11" 3) "alpine" 4) "ubuntu" 5) "centos" 6) "windows7" #根據score從大到小遞減排序,並展示第2位到倒數第2位元素 127.0.0.1:6379> zrevrange zset1 1 -2 1) "windows11" 2) "alpine" 3) "ubuntu" 4) "centos" #根據score從大到小遞減排序,並展示所有元素及score資訊 127.0.0.1:6379> zrevrange zset1 0 -1 withscores 1) "windows10" 2) "900" 3) "windows11" 4) "198" 5) "alpine" 6) "170" 7) "ubuntu" 8) "160" 9) "centos" 10) "150" 11) "windows7" 12) "90" #根據score從大到小遞減排序,並展示第2位到倒數第2位元素及score資訊 127.0.0.1:6379> zrevrange zset1 1 -2 withscores 1) "windows11" 2) "198" 3) "alpine" 4) "170" 5) "ubuntu" 6) "160" 7) "centos" 8) "150"
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
可用版本: >= 1.0.5時間複雜度: O(log(N)+M),N
為有序集的基數,M
為被結果集的基數。返回有序集
key
中,所有score
值介於min
和max
之間(包括等於min
或max
)的成員。有序整合員按score
值遞增(從小到大)次序排列。具有相同
score
值的成員按字典序(lexicographical order)來排列(該屬性是有序集提供的,不需要額外的計算)。可選的
LIMIT
引數指定返回結果的數量及區間(就像SQL中的SELECT LIMIT offset, count
),注意當offset
很大時,定位offset
的操作可能需要遍歷整個有序集,此過程最壞複雜度為 O(N) 時間。可選的
WITHSCORES
引數決定結果集是單單返回有序集的成員,還是將有序整合員及其score
值一起返回。 該選項自 Redis 2.0 版本起可用。區間及無限
min
和max
可以是-inf
和+inf
,這樣一來,你就可以在不知道有序集的最低和最高score
值的情況下,使用 ZRANGEBYSCORE 這類命令。預設情況下,區間的取值使用閉區間 (小於等於或大於等於),你也可以通過給引數前增加
(
符號來使用可選的開區間 (小於或大於)。舉個例子:
ZRANGEBYSCORE zset (1 5返回所有符合條件
1 < score <= 5
的成員,而ZRANGEBYSCORE zset (5 (10則返回所有符合條件
5 < score < 10
的成員。
#將score分數在區間 150 >= score >=198 之間的元素按照從小到大遞增次序排列並展示 127.0.0.1:6379> zrangebyscore zset1 150 198 1) "centos" 2) "ubuntu" 3) "alpine" 4) "windows11" #將score分數在區間 150 > score >198 之間的元素及score資訊按照從小到大遞增次序排列並展示 127.0.0.1:6379> zrangebyscore zset1 (150 (198 withscores 1) "ubuntu" 2) "160" 3) "alpine" 4) "170"
ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]
可用版本: >= 2.2.0時間複雜度: O(log(N)+M),N
為有序集的基數,M
為結果集的基數。返回有序集
key
中,score
值介於max
和min
之間(預設包括等於max
或min
)的所有的成員。有序整合員按score
值遞減(從大到小)的次序排列。具有相同
score
值的成員按字典序的逆序(reverse lexicographical order )排列。除了成員按
score
值遞減的次序排列這一點外, ZREVRANGEBYSCORE 命令的其他方面和 ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] 命令一樣。
#展示所有score分數低於900的元素,並按照從大到小遞增排序 127.0.0.1:6379> zrevrangebyscore zset1 (900 -inf 1) "windows11" 2) "alpine" 3) "ubuntu" 4) "centos" 5) "windows7" #展示所有score分數不低於170的元素及score資訊,按照從大到小遞增排序 127.0.0.1:6379> zrevrangebyscore zset1 +inf 170 withscores 1) "windows10" 2) "900" 3) "windows11" 4) "198" 5) "alpine" 6) "170"
ZCARD key
可用版本: >= 1.2.0時間複雜度: O(1)返回有序集
key
的基數。
127.0.0.1:6379> zrange zset1 0 -1 1) "windows7" 2) "centos" 3) "ubuntu" 4) "alpine" 5) "windows11" 6) "windows10" 127.0.0.1:6379> zcard zset1 (integer) 6
ZCOUNT key min max
可用版本: >= 2.0.0時間複雜度: O(log(N)),N
為有序集的基數。返回有序集
key
中,score
值在min
和max
之間(預設包括score
值等於min
或max
)的成員的數量。
127.0.0.1:6379> zrange zset1 0 -1 withscores 1) "windows7" 2) "90" 3) "centos" 4) "150" 5) "ubuntu" 6) "160" 7) "alpine" 8) "170" 9) "windows11" 10) "198" 11) "windows10" 12) "900" 127.0.0.1:6379> zcount zset1 100 900 (integer) 5 127.0.0.1:6379> zcount zset1 -inf +inf (integer) 6
ZRANK key member
可用版本: >= 2.0.0時間複雜度: O(log(N))返回有序集
key
中成員member
的排名。其中有序整合員按score
值遞增(從小到大)順序排列。排名以
0
為底,也就是說,score
值最小的成員排名為0
127.0.0.1:6379> zrank zset1 windows11 (integer) 4 127.0.0.1:6379> zrank zset1 centos (integer) 1
ZREVRANK key member
可用版本: >= 2.0.0時間複雜度: O(log(N))返回有序集
key
中成員member
的排名。其中有序整合員按score
值遞減(從大到小)排序。排名以
0
為底,也就是說,score
值最大的成員排名為0
。
127.0.0.1:6379> zrevrank zset1 centos (integer) 4 127.0.0.1:6379> zrevrank zset1 windows11 (integer) 1
ZSCORE key member
可用版本: >= 1.2.0時間複雜度: O(1)返回有序集
key
中,成員member
的score
值。
127.0.0.1:6379> zscore zset1 centos "150" 127.0.0.1:6379> zscore zset1 windows10 "900"
ZINCRBY key increment member
可用版本: >= 1.2.0時間複雜度: O(log(N))為有序集
key
的成員member
的score
值加上增量increment
。可以通過傳遞一個負數值
increment
,讓score
減去相應的值,比如ZINCRBY key -5 member
,就是讓member
的score
值減去5
。當
key
不存在,或member
不是key
的成員時,ZINCRBY key increment member
等同於ZADD key increment member
#對指定元素的分數加 127.0.0.1:6379> zscore zset1 centos "300" 127.0.0.1:6379> zincrby zset1 32 centos "332" 127.0.0.1:6379> zscore zset1 centos "332" #對指定元素的分數減 127.0.0.1:6379> zscore zset1 centos "332" 127.0.0.1:6379> zincrby zset1 -87 centos "245" 127.0.0.1:6379> zscore zset1 centos "245" #對不存在的元素進行score分數增 127.0.0.1:6379> zrange zset1 0 -1 1) "windows7" 2) "ubuntu" 3) "alpine" 4) "windows11" 5) "centos" 6) "windows10" 127.0.0.1:6379> zincrby zset1 324 unix "324" 127.0.0.1:6379> zrange zset1 0 -1 1) "windows7" 2) "ubuntu" 3) "alpine" 4) "windows11" 5) "centos" 6) "unix" 7) "windows10"
ZREM key member [member …]
可用版本: >= 1.2.0時間複雜度: O(M*log(N)),N
為有序集的基數,M
為被成功移除的成員的數量。移除有序集
key
中的一個或多個成員,不存在的成員將被忽略。
127.0.0.1:6379> zrange zset1 0 -1 withscores 1) "windows7" 2) "90" 3) "ubuntu" 4) "160" 5) "alpine" 6) "170" 7) "windows11" 8) "198" 9) "centos" 10) "245" 11) "unix" 12) "324" 13) "windows10" 14) "900" 127.0.0.1:6379> zrem zset1 unix ios (integer) 1 127.0.0.1:6379> zrange zset1 0 -1 withscores 1) "windows7" 2) "90" 3) "ubuntu" 4) "160" 5) "alpine" 6) "170" 7) "windows11" 8) "198" 9) "centos" 10) "245" 11) "windows10" 12) "900"
ZREMRANGEBYRANK key start stop
可用版本: >= 2.0.0時間複雜度: O(log(N)+M),N
為有序集的基數,而M
為被移除成員的數量。移除有序集
key
中,指定排名(rank)區間內的所有成員。區間分別以下標引數
start
和stop
指出,包含start
和stop
在內。下標引數
start
和stop
都以0
為底,也就是說,以0
表示有序集第一個成員,以1
表示有序集第二個成員,以此類推。 你也可以使用負數下標,以-1
表示最後一個成員,-2
表示倒數第二個成員,以此類推。
127.0.0.1:6379> zrange zset1 0 -1 withscores 1) "windows7" 2) "90" 3) "ubuntu" 4) "160" 5) "alpine" 6) "170" 7) "windows11" 8) "198" 9) "centos" 10) "245" 11) "windows10" 12) "900" 127.0.0.1:6379> zremrangebyrank zset1 0 2 (integer) 3 127.0.0.1:6379> zrange zset1 0 -1 withscores 1) "windows11" 2) "198" 3) "centos" 4) "245" 5) "windows10" 6) "900"
ZREMRANGEBYSCORE key min max
可用版本: >= 1.2.0時間複雜度: O(log(N)+M),N
為有序集的基數,而M
為被移除成員的數量。移除有序集
key
中,所有score
值介於min
和max
之間(包括等於min
或max
)的成員。
127.0.0.1:6379> zrange zset1 0 -1 withscores 1) "windows11" 2) "198" 3) "centos" 4) "245" 5) "windows10" 6) "900" 127.0.0.1:6379> zremrangebyscore zset1 -inf 300 (integer) 2 127.0.0.1:6379> zrange zset1 0 -1 withscores 1) "windows10" 2) "900"
127.0.0.1:6379> del zset1 (integer) 1
Hash雜湊是一個字元型別String(field)與 值(value)的對映表,Redis中的每個雜湊Hash可以儲存 2^32-1 鍵值對,類似於字典作用,特別適用於儲存物件場景。
HSET hash field value
可用版本: >= 2.0.0時間複雜度: O(1)將雜湊表
hash
中域field
的值設定為value
。如果給定的雜湊表並不存在, 那麼一個新的雜湊表將被建立並執行
HSET
操作。如果域
field
已經存在於雜湊表中, 那麼它的舊值將被新值value
覆蓋。
127.0.0.1:6379> hset hash1 id 1 name janzen age 18 sex man number 159159 (integer) 5 127.0.0.1:6379> type hash1 hash
HSETNX hash field value
可用版本: >= 2.0.0時間複雜度: O(1)當且僅當域
field
尚未存在於雜湊表的情況下, 將它的值設定為value
。如果給定域已經存在於雜湊表當中, 那麼命令將放棄執行設定操作。
如果雜湊表
hash
不存在, 那麼一個新的雜湊表將被建立並執行HSETNX
命令。返回值
HSETNX
命令在設定成功時返回1
, 在給定域已經存在而放棄執行設定操作時返回0
127.0.0.1:6379> exists hash2 (integer) 0 #hash 不存在 127.0.0.1:6379> hsetnx hash2 id 2 (integer) 1 #同時修改多個引數 127.0.0.1:6379> hsetnx hash2 id 2 name qiu (error) ERR wrong number of arguments for 'hsetnx' command
#field 不存在 127.0.0.1:6379> hsetnx hash2 name qiu (integer) 1 #field已存在 127.0.0.1:6379> hsetnx hash2 id 3 (integer) 0 127.0.0.1:6379>
HGET hash field
可用版本: >= 2.0.0時間複雜度: O(1)返回雜湊表中給定域的值。
127.0.0.1:6379> hget hash1 id "1" 127.0.0.1:6379> hget hash1 name "janzen" 127.0.0.1:6379> hget hash1 age "18" 127.0.0.1:6379> hget hash2 id "2" 127.0.0.1:6379> hget hash2 name "qiu"
HDEL key field [field …]
刪除雜湊表
key
中的一個或多個指定域,不存在的域將被忽略。
127.0.0.1:6379> hdel hash2 id (integer) 1 127.0.0.1:6379> hdel hash2 id name (integer) 1
HMSET key field value [field value …]
同時將多個
field-value
(域-值)對設定到雜湊表key
中。此命令會覆蓋雜湊表中已存在的域。
如果
key
不存在,一個空雜湊表被建立並執行 HMSET 操作
127.0.0.1:6379> hmset hash2 id 2 name qiu age 20 sex man number 970203 OK
HMGET key field [field …]
返回雜湊表
key
中,一個或多個給定域的值。如果給定的域不存在於雜湊表,那麼返回一個
nil
值。因為不存在的
key
被當作一個空雜湊表來處理,所以對一個不存在的key
進行 HMGET 操作將返回一個只帶有nil
值的表。
127.0.0.1:6379> hmget hash2 id name number 1) "2" 2) "qiu" 3) "970203" 127.0.0.1:6379> hmget hash1 id name number 1) "1" 2) "janzen" 3) "159159"
HKEYS key
返回雜湊表
key
中的所有field
127.0.0.1:6379> hkeys hash1 1) "id" 2) "name" 3) "age" 4) "sex" 5) "number" 127.0.0.1:6379> hkeys hash2 1) "id" 2) "name" 3) "age" 4) "sex" 5) "number"
HVALS key
返回雜湊表
key
中所有field的值。
127.0.0.1:6379> hvals hash1 1) "1" 2) "janzen" 3) "18" 4) "man" 5) "159159" 127.0.0.1:6379> hvals hash2 1) "2" 2) "qiu" 3) "20" 4) "man" 5) "970203"
HGETALL key
返回雜湊表
key
中,所有的域和值。
127.0.0.1:6379> hgetall hash1 1) "id" 2) "1" 3) "name" 4) "janzen" 5) "age" 6) "18" 7) "sex" 8) "man" 9) "number" 10) "159159" 127.0.0.1:6379> hgetall hash2 1) "id" 2) "2" 3) "name" 4) "qiu" 5) "age" 6) "20" 7) "sex" 8) "man" 9) "number" 10) "970203"
HDEL key field [field …]
刪除雜湊表
key
中的一個或多個指定域,不存在的域將被忽略。
127.0.0.1:6379> hgetall hash2 1) "id" 2) "2" 3) "name" 4) "qiu" 5) "age" 6) "20" 7) "sex" 8) "man" 9) "number" 10) "970203" 127.0.0.1:6379> hdel hash2 id (integer) 1 127.0.0.1:6379> hgetall hash2 1) "name" 2) "qiu" 3) "age" 4) "20" 5) "sex" 6) "man" 7) "number" 8) "970203" 127.0.0.1:6379> hdel hash2 name age addr (integer) 2 127.0.0.1:6379> hgetall hash2 1) "sex" 2) "man" 3) "number" 4) "970203"
127.0.0.1:6379> hgetall hash2 1) "sex" 2) "man" 3) "number" 4) "970203" 127.0.0.1:6379> del hash2 (integer) 1 127.0.0.1:6379> hgetall hash2 (empty list or set) 127.0.0.1:6379> exists hash2 (integer) 0 127.0.0.1:6379>