redis入門指南(二)—— 資料操作相關命令
寫在前面
以下絕大部分內容取材於《redis入門指南》,部分結合個人知識,實踐後得出。
只記錄重要,明確,屬於新知的相關內容,杜絕冗餘和重複。
字串
1、字串型別是redis中最常見的型別,目前字串資料的最大容量是512M。
2、取值、賦值
SET key value
GET key
當鍵值不存在時,返回nil
3、數字遞增
INCR num
a、redis的鍵值不支援數字型別,當儲存字串是整數型別時,redis提供了遞增命令,當資料型別不是整數時,會返回錯誤。
b、遞增成功時會返回遞增後的值,這個命令適合計數,當然用GET和SET 命令可以組合實現這個功能,但redis的所有命令都是原子操作,不會存在衝突,更加安全。
4、增加指定整數
INCRBY key num
返回值為遞增後的值
5、減少整數
DECR key 整數遞減,和遞增命令對應
DECRBY key num 減少指定整數
6、增加指定浮點數
INCRBYFLOAT key num 向鍵值遞增一個雙精度浮點數
7、向尾部追加值
APPEND key string
當string包含空格等字元時,需要用引號包含字串,redis-cli需要以此區分。
8、獲取字串長度
STRLEN key
redis可以儲存二進位制字元,儲存中文時長度會取決於編碼方式
9、同時獲取/設定多個字元
MGET key [key ...]
MSET key value [key value ...]
1 MSET key1 v1 key2 v2 key3 v3 2 MGET key1 key2 key3 3 MSET key1 v1
10、位操作相關命令
GETBIT key offset 獲取,這裡的偏移量按位計算,從0開始,返回0或1
SETBIT key offset value 設定,返回值為設定前的值
BITCOUNT key [start] [end] 獲取字串中二進位制位為1的個數
BITOP operation destkey key [key ...] 位運算
BITPOS key 1/0 [start] [end] 獲取第一個二進位制位位0或1的偏移量
a、GETBIT時,索引超過了字串長度,返回0。
b、SETBIT時,索引超過了字串長度,會將中間補足為0,同時,索引超出過多,會造成redis卡頓,浪費記憶體。
c、BITCOUNT 命令可以通過引數控制統計的範圍,範圍是以位元組計的,而非位,並且以0開始。
d、位運算支援的操作有 AND、OR、XOR、NOT,且支援對多個鍵值同時位運算。
e、2.8.7版之後,加入BITPOS 命令,同時可按位元組控制範圍,但返回的偏移量的值是從頭計算的,特別地,當不設定結束位置,且所有位為均為1,且查詢0首次出現的位置時,會返回鍵值長度下一位元組第一位的偏移量,這是因為redis會認為鍵值長度後的值都為0。
雜湊型別
11、一個雜湊型別鍵至多可以包含之多2^32-1個欄位。
12、賦值、取值
HSET key field value
HGET key field
HMSET key field [field value ...]
HMGET key [field ...]
HGETALL key
13、判斷欄位是否存在
HEXISTS key field
存在返回1,否則返回0。
14、欄位不存在時賦值
HSETNX key field value
與HSET類似,但它只在欄位不存在時賦值。
15、增加指定整數
HINCRBY key field increment
如果欄位不存在會自動建立,並初始化為0,之後增加,返回增加後的數。
16、刪除欄位
HDEL key field [field ...]
可以刪除一個或多個欄位,返回被刪除的欄位個數。
17、只獲取欄位名或欄位值
HKEYS key
HVALS key
18、獲取欄位數量
HLEN key
列表型別
19、內部使用雙向列表實現(各種操作的複雜度可想而知),一個列表型別鍵最多能容納2^32-1個元素。
20、向列表兩端增加元素
LPUSH key value [value ...]
RPUSH key value [value ...]
返回值表示增加後列表的元素數量
21、從列表兩邊彈出元素
LPOP key
RPOP key
將元素從列表中移除並返回,可配合使用構建成為棧或佇列。
22、獲取列表長度
LLEN key
23、獲得列表片段
LRANGE key start end
當start和end都大於等於0時,左右均為閉區間,且start從0開始,當end大於列表長度時,依然會返回整個列表;當start和end均為負數時,可解釋為返回倒數第start個到倒數第end個元素,所以次數end最大為-1;當start索引的位置在end後面時,將返回空列表。
24、刪除列表中指定的值
LREM key count value
刪除列表中count個值為value的元素,返回成功刪除的元素個數。當count大於0時,會從列表左邊開始刪除;當count小於0時,會從列表右邊開始刪除;當count為0時,會刪除所有值為value的元素。
25、獲得/設定指定索引值的元素
LINDEX key index
LSET key index value
它們都支援負數作為索引
26、保留列表指定片段
LTRIM key start end
刪除指定索引之外的所有元素,支援負數作為索引。
27、向列表中插入元素
LINSERT key BRFORE/AFTER pivot value
在列表中從左至右查詢值為pivot的元素,再根據BEFOR或AFTER插入該元素之前還是之後,返回插入列表後的元素個數;當pivot不存在時返回-1。
28、將元素由一個列表轉移到另一個
RPOPLPUSH source destination
將source列表右邊彈出一個元素,插入到destination列表的左邊,並返回這個值,整個過程為原子操作,當source和destination為同一個鍵時,會將隊尾的元素移動到隊首(一個可以隨時插入的迴圈佇列?)。
集合型別
29、集合中每個元素不同,且無序,最多可儲存2^32-1個字串,內部由值為空的散列表實現。
30、增加/刪除元素
SADD key member [member ...]
SREM key member [member ...]
集合中的元素是不重複的,所以SADD雖然可以新增多個元素,對於已存在的元素會忽略,並返回成功新增的元素數量,SREM返回刪除成功的個數。
31、獲得集合中所有元素
SMEMBERS key
32、判斷元素是否在集合中
SISMEMBER key number
33、集合間差集運算
SDIFF key [key ...]
用來計算兩個及以上集合的差集,SDIFF A B 表示 A-B = {x | x∈A 且 x∈B}。當有多個集合時,按順序計算出前兩個的差集,再用結果與後面的集合繼續運算。
34、集合間交集運算
SINTER key [key ...]
對多個集合執行交集運算
35、集合間並集運算
SUNION key [key ...]
對多個集合執行並集運算
36、獲得集合中元素個數
SCARD key
37、進行集合運算並將結果儲存
SDIFFSTORE destination key [key ...]
SINTERSTORE destination key [key ...]
SUNIONSTORE destination key [key ...]
38、隨機獲得集合中的元素
SRANDMEMBER key [count]
隨機從集合中獲得一個元素,還可以傳遞count引數獲得多個元素。當count大於0時,會獲取count個不重複的元素,當count大於集合元素總數時返回所有元素;當count小於0時,會隨機獲取-count個元素,這些元素有可能重複。
39、從集合中彈出一個元素
SPOP key
有序集合型別
40、有序集合使用跳錶和散列表實現,並且可以調整某個元素在集合中的位置(通過修改這個元素的分數)。
41、增加元素
ZADD key score member [key member ...]
如果新增的元素已經存在,則會修改它的分數(這可能會導致這個元素的位置發生變化,也就是重排序),分數可以是整數,也可以是雙精度浮點數,支援科學計數法表示,其中+inf和-inf分別表示正無窮和負無窮。
42、獲得元素的分數
ZSCORE key member
43、獲得排名在某個範圍內的元素
ZRANGE key start end [WITHSCORES]
ZREVRANGE key start end [WITHSCORES]
同樣支援負數索引,如果想要帶上元素分數可以尾部追加WITHSCORES引數,如果兩個元素分數相同,則會按照元素的字典順序排列。以上兩個命令區別在於前者按照從小到大的順序給出結果,後者相反
44、獲得指定分數範圍的元素
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
ZREVRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
該命令按照元素從小到大順序返回分數在min和max之間的元素,如果不想包含端點值,可以在分數前加上"("符號,分數支援正無窮和負無窮,WITHSCORES同樣表示攜帶分數一起返回,LIMIT offset count表示在獲得的元素基礎上向後偏移offset個元素,並且只獲取前offset個元素。以上兩個命令區別同上。
45、增加某個元素的分數
ZINCRBY key increment member
increment可以是整數,小數,正數或負數,如果member不存在,則會先建立一個分數為0的member在執行操作,最後均返回更新後的分數。
46、獲得集合中元素的數量
ZCARD key
47、獲得指定分數範圍內的元素個數
ZCOUNT key min max
48、刪除一個或多個元素
ZREM key member [member ...]
返回成功刪除的元素數量
49、按照排名範圍刪除元素
ZREMRANGEBYRANK key start end
返回成功刪除的元素數量
50、按照分數範圍刪除元素
ZREMRANGEBYSCORE key min max
51、獲得元素的排名
ZRANK key member
ZREVRANK key member
返回的排名從0開始,前者從小到大排序,後者從大到小。
52、計算有序集合的交集
ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
該命令將計算多個有序集合的交集並存儲到destination鍵中,並返回destination鍵中元素的數量。
destination鍵中元素的分數由AGGREGATE引數決定,當AGGREGATE為SUM(預設)時,destination鍵中元素的分數是每一個參與計算的有序集合中該元素的和;當AGGREGATE為MIN時,destination鍵中元素的分數是每一個參與計算的有序集合中該元素的最小值;AGGREGATE為時,destination鍵中元素的分數是每一個參與計算的有序集合中該元素的最大值。
WEIGHTS引數用來設定每個參與計算的有序集合的權重,每個集合中的元素在參與計算時都會被乘上該集合的權重。
53、計算有序集合的並集
ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
用法同上
&n