1. 程式人生 > >redis入門指南(二)—— 資料操作相關命令

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