Redis系列(十一)Redis命令全集

背景介紹

以下摘自:Redis 官網。

Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker. It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes with radius queries and streams. Redis has built-in replication, Lua scripting, LRU eviction, transactions and different levels of on-disk persistence, and provides high availability via Redis Sentinel and automatic partitioning with Redis Cluster.

總的來說,Redis 是一個基於內存的高性能的鍵值型數據庫,也就是常說的 NoSQL, 可以用來作爲數據庫或者緩存。並且支持多種數據結構,包括字符串,散列,列表,集合,帶有範圍查詢的排序集,位圖,HyperLogLog,具有半徑查詢的地理空間索引和流。

各種語言都提供了 Redis 的客戶端,比如 Java 的Jedis和 python 的redis-py.

同時 Redis 也提供交互式的客戶端,在 mac 上執行:

brew install redis進行安裝,安裝完成後執行:

redis-cli 進入交互式的客戶端,即可開始使用。

本文主要用來記錄針對各種數據結構的操作命令,來源主要是 Redis 官網加上自己的理解。由於英語問題,不保證理解一定正確。大家可以參考 redis 官網 來進行學習。

public

  • help: 這個命令很重要,只要你用的好,可以查看所有命令的用法,可以起到一個臨時提示的作用,比如這個命令有哪些選項等等。使用方法:help之後根據提示輸入:help command, 即可以查看該命令的詳細方法簽名。輸入help @group可以查看該 group 相關的命令,比如list,set.

  • keys: 使用模式匹配,返回匹配的 key, 使用*進行查看全量的 key. 注意:不要在線上使用這個命令,不可控。keys **

  • exists: 查看某個 key 是否存在,存在返回 1, 不存在返回 0.exists key.

  • scan: 遍歷所有的 key, 因爲做了分頁,所以是安全的。sacn cursor match * count 100. *可以進行模式匹配。cursor初次使用爲 0, 之後每一次爲上一次scan返回的遊標。

  • type: 查看某個 key 的類型,返回描述。type key.

  • del: 刪除 key, 可以刪除多個。del key1 key2

  • expire: 設置過期時間,expire key seconds.

  • ttl: 查看 key 的剩餘生存時間,ttl key

  • pttl: 以毫秒形式查看 key 的過期時間,pttl key

  • move: 將當前數據庫中的某個 key 移到新的數據庫。move key db

  • dump: 拿到序列化後的 value. dump key.

  • resotre: 用上一個命令拿到的值回覆某個 key.resotre key seconds 序列化的 value

  • object: 查看指定 key 值的內部結構。

  • MONITOR: 可以監控 redis 服務器,看他處理的每個請求。可以在 redis 客戶端中執行monitor, 也可以直接在 shell 種執行:redis-cli monitor.

DB

這塊其實也是 public 的一部分,我單獨將其寫出來一下。

  • select: 選擇數據庫,默認爲 16 個數據庫可以選擇。select index

  • flushdb: 刪除當前 db 的所有 key. flushdb.

  • swapdb: 交換兩個數據庫。swapdb index1 index2.

  • randomkey: 在當前庫裏隨機返回一個 key. randomkey.

  • monitor: 監視器,可以監視某個 redis 接受的所有命令。redis-cli monitor. 直接在命令行中執行。

string

  • set: 設置某個 key 的 value.set key value
  • get: 獲取某個 key 的 value. get key
  • strlen: 返回字符串的長度。strlen key
  • append: 如果 key 存在並且爲字符串,則追加值,如果 key 不存在,則創建並追加,此時相當於 set. 成功後返回追加後字符串的長度。append key value
  • getrange: 根據輸入的偏移來返回子字符串。支持-1 偏移,代表最後一個字符。getrange key start end
  • setrange: 在 key 的指定偏移量處寫入新的值。setrange key offset value
  • incr: 操作整數。當你的 key 中存儲的是整數的時候,會將整數加 1. 需要注意的是,key 爲空的時候會被置爲 0 然後加 1.key 的值爲不能解釋爲數字的字符串時會報錯。incr key
  • decr: incr的反操作,遞減 1.decr key
  • incrby: 遞增某個增量。其他同incr一樣。incrby key one_int_value.
  • decrby: incrby 的反操作。遞減某個量。decrby key one_int_value
  • mget: 一次性獲取多個 key. 注意如果 key 不存在會返回nil, 所以這條命令永遠不會出錯。mget key1 key2 ...
  • mset: 一次性寫入多個 key-value. 不會失敗,並且是原子操作。也就是說所有值必然會更新。mset key1 value1 key2 value2
  • msetnx: 批量的非空寫入,注意是原子操作,所以當某一個 key 存在,所以 key 都不會被寫入。msetnx key1 value1 key2 value2
  • setex: 設置 key=value 且過期時間爲 seconds. 原子操作,相當於set + expire. 語法set key seconds value
  • setnx: 是set if not exists, 當 key 不存在時寫入,存在時不做任何操作。setnx key value
  • getset: 設置新值並返回舊值。getset key new_value
  • psetex : 和setex相似,區別只是設置的過期時間單位爲毫秒。psetex key ms value

list

  • LPUSH: 向隊頭放入一個元素。LPUSH key v1 v2 v3.

  • RPUSH: 向隊尾放入一個元素。RPUSH key v1 v2 v3.

  • LPOP: 從隊頭彈出一個元素。LPOP key.

  • RPOP: 從隊尾彈出一個元素。RPOP key.

  • LLEN: 獲取隊列的長度。LLEN key.

  • LINDEX: 獲取指定 index 的值。LINDEX key 0.0,1,2 是隊頭的 index,-1,-2,-3 是隊尾的 index.

  • LINSERT: 在隊列中某個值的前/後插入一個新元素。LINSERT key before|after pivot value.O(n) 的時間複雜度。

  • LRANGE: 返回範圍內的元素,支持-1 從尾部計算。LRANGE key 0 -1可以返回全部值。注意,時間複雜度是 O(N+S).

  • LREM: 刪除指定數量個 value.LREM key count value.count 大於零時從頭到尾數,count<0 時從後向前數,count=0 刪除所有指定的 value.

  • LSET: 設置指定 index 上的值。LSET key index value. 時間複雜度爲 O(n).

  • LTRIM: 修剪 list, 僅保留指定範圍內的值。LTRIM key start end. 事件負責度 O(n).

  • LPUSHX: 在隊頭插入一個元素,當 key 不存在時,不做操作。LPUSHX key v.

  • RPUSHX: 在隊尾插入一個元素,當 key 不存在時,不做操作。RPUSHX key v.

  • BLPOP: 從隊列頭部,阻塞式的彈出一個元素,支持多個鍵,支持超時和永不超時。BLPOP key1 key2 3.

  • BRPOP: 從隊列尾部,阻塞式的彈出一個元素,支持多個鍵,支持超時和永不超時。BLPOP key1 key2 3.

  • RPOPLPUSH: 將一個隊列的最後一個元素彈出並且放到另一個隊列的頭部。RPOPLPUSH source-list destination-list.

  • BRPOPLPUSH: 阻塞版本的上一個命令。

sets

  • SADD: 向集合中添加一個或者多個元素。SADD key v1 v2 v3.

  • SCARD: 返回集合的元素數量。SCARD key.

  • SPOP: 隨機從集合中彈出一定數量的元素。SPOP key count.

  • SMOVE: 將某個元素從一個集合移到另一個集合。SMOVE source target member.

  • SMEMBERS: 返回該集合的所有成員。SMEMBERS key.

  • SISMEMBER: 給定元素是否是集合中的一員,返回 1 或者 0.SISMEMBER key v.

  • SRANDMEMBER: 隨機獲取指定數量個成員。SRANDMEMBER count,O(1) 或者 O(n). 看 count 咯。

  • SREM: 從給定集合中刪除指定的多個元素。SREM key v1 v2 v3.

  • SSCAN: 掃描集合。以較小的代價查找一些元素。sscan key 0 match o* count 10. 將返回 set 中以 o 開頭的 10 個元素,可以繼續使用遊標來掃描。

  • SDIFF: 返回第一個集合和其他集合不同的元素。SDIFF key1 key2 key3.
    例如:

key1 = {a,b,c,d}
key2 = {c}
key3 = {a,c,e}
SDIFF key1 key2 key3 = {b,d}

O(n) 的時間複雜度,n 是所有 set 的集合總數。

  • SDIFFSTORE: 和上一個命令差不多,只不過會把結果存在第一個 set 中,覆蓋存儲。SDIFFSTORE key1 key2 key3.O(n) 的時間複雜度。

  • SINTER: 求多個集合的交集,SINTER key1 key2 key3. 時間複雜度是 O(m * n).m 是 key1 的元素數量,n 是後面所有集合的最小元素數量。

  • SINTERSTORE: 上一個命令的存儲版本,將結果覆蓋到第一個 set 中。

  • SUNION: 求並集。SUNION key key1 key2.

  • SUNIONSTORE: 上一個命令的存儲版本,將結果存儲在 key 中。

sorted sets

  • ZADD: 向有序集中添加元素。支持多個(分數-值), 且支持額外的指令。ZADD [NX | XX] [CH] [INCR] score1 value1 score2 value2. 指令也可以沒有,有的話規定一些重複之類的規則。時間複雜度:對每一個(分數-值)來說都是爲 O(log(n))

  • ZREM: 從集合中移除一個或者多個元素。ZREM key v1 v2.O(m*log(n))

  • ZSCORE: 獲取元素的分值。ZSCORE key v.O(1).

  • ZRANK: 返回該值在集合中的排名,從低到高排序的名次。ZRANK key value.O(log(n)).

  • ZREVRANK: 返回該值在集合中的排名,從高到低排序的名次。ZREVRANK key value.O(log(n)).

  • ZPOPMAX: 彈出分數最高的 x 個值。ZPOPMAX key count.O(log(N)*M).

  • ZPOPMIN: 彈出分數最低的 x 個值。ZPOPMIN key count.O(log(N)*M).

  • BZPOPMAX: 從有續集中彈出分數最大的值。阻塞版本。BZPOPMAX key key2 key3 time.time 爲阻塞時間,同樣 0 代表永不超時。O(n).

  • BZPOPMIN: 和上面命令一樣,只不過彈出的是分數最小的值。O(n).

  • ZCARD: 返回有續集的元素個數。ZCARD key.O(1) 的時間複雜度。

  • ZCOUNT: 返回在給定分值區間內的元素數量。ZCOUNT key min max.O(log(n)).

  • ZRANGE: 返回給定分數範圍內的值。ZRANGE key start end WITHSOCRES.

    • WITHSCORES: 返回值是否帶有分值。
    • 分值相同時使用字典排序。
    • O(log(N)+M)
  • ZRANGEBYLEX: 根據值的起始和截止返回範圍內的值。ZRANGEBYLEX key min max [LIMIT offset count], 字典序版本的上一個命令。

  • ZRANGEBYSCORE: 根據分值的起始和截止返回範圍內的值。ZRANGEBYSCORE key min max [LIMIT offset count],

  • 這裏是三個上面三個的反序命令,分值或者字母序列的從高到低。懶得寫。

  • ZLEXCCOUNT: 根據值進行字典排序版本的上一個命令。ZLEXCCOUNT key min max.O(log(n)).

  • ZINCRBY: 給某個元素增加給定的分值。ZINCRBY key score value.O(log(n)).

  • ZSCAN: 掃描集合,和set部分的命令差不多。

  • ZINTERSTORE: 求給定集合的交集並存在指定的集合中(覆蓋存儲), 還有一些其他的選項供操作。ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]

    • WEIGHTS: 指定每個集合在算出最後的分數之前的乘法因子。
    • AGGREGATE: 指定聚合的方式,可以是求和,最大,最小值。
    • 時間複雜度很複雜。…
  • ZUNIONSTORE: 上一個命令的並集版本。

hashes

  • HSET: 寫入一條數據,key 對應的列的數據。HSET key field value.

  • HGET: 獲取某個 key 的某個列的值。HGet key field.

  • HMGET: 獲取多個列的值的列表。HMGET key field1 field2.

  • HMSET: 一次寫入多個列-值。HMSET key field1 v1 field2 v2.

  • HSETX: 僅當該列不存在的時候寫入。HSETX key field value.

  • HDEL: 刪除一個或者多個列。HDEL key field field field

  • HEXISTS: 檢查是否包含某個列。HEXISTS key field. 返回 0 或者 1.

  • HGETALL: 返回當前 key 中的所有字段和值。HGETALL key. 時間複雜度是 O(n).

  • HINCRBY: 對某個列的值進行增加。HINCRBY key field number. 只支持 feild 是 64 位有符號整數。

  • HINCRBYFLOAT: 增加一個浮點數。其餘和上面的命令一樣。HINCRBYFLOAT key field float.

  • HKEYS: 返回所有的列名。HKEYS key.

  • HLEN: 返回列的數據。HLEN key.

  • HSCAN: 掃描所有的列-值。返回的規則和其他的 scan 一樣。HSCAN key 0 match uu* count 10

  • HSTRLEN: 返回該列的值的長度。HSTRLEN key field.

  • HVALS: 返回所有的值。只有值沒有列名。HVALS key. 時間複雜度爲 O(n).

streams

本章節的命令簽名較長且變化較多,因此不再提供示例命令和方法簽名,可以去下面的鏈接中學習。

stream 相關命令

  • XINFO: 用於檢索有關流和關聯的消費者組的不同信息。有三種子命令,STREAMS,GROUPS,CONSUMERS.

  • XADD: 將給定的條目添加到 Stream 中,如果 stream 不存在,則以 key 創建一個 Stream.

  • XRANGE: 從 Stream 中查找指定範圍的條目並返回。

  • XREVRANGE: **XRANGE **的倒序版本,接受參數也是倒序。

  • XLEN: 返回 Stream 中的項目數量。

  • XDEL: 從 Stream 刪除給定 ID 的項目。

  • XREAD: 從一個或者多個 Stream 中讀取數據,僅返回 ID 大於傳入 ID 的信息。

  • XTRIM: 將 Stream 修剪的只保留給定數量的項目,有多種修剪策略,目前只實現了一種。

  • XREADGROUP: 使用消費者組從 Stream 中讀取信息。

  • XACK: 確認已經處理消息。

  • XCLAIM: 更改消息的所有權,可以是其他消費者來處理此消息,

  • XPENDING: 查看正在處理的消息的信息。

  • XGROUP: 創建,銷燬,管理消費者組。也有多個子命令,CREATE,SETID,DESTROY,DELCONSUMER.

bitmaps

其實 bitmap 不是一個實際的數據結構,只是在 string 數據結構上的一組面向位的操作,因爲 string 數據結構是二進制安全的,所以這個是可行的。

  • SETBIT: 設置某個 key 在某個位置的 bit 值。SETBIT key offset value.

  • GETBIT: 獲取某個 key 在某個位置的 bit 值。GETBIT key offset.

  • BITCOUNT: 獲取某個範圍內 bit=1 的總數。BITCOUNT key start end.

  • BITPOS: 獲取某個範圍內第一個 0 或者 1 出現的位置。BITPOS key 0 1 2.

hyperloglogs

hyperloglog 的原理這裏就不講了,完了多看看之後單獨記錄一下。

  • PFADD: 添加一個或者多個元素。PFADD key1 v1 v2 v3.O(1).

  • PFCOUNT: 返回不重複的元素的個數,可以統計多個 key. 同時,返回值是有一定 (0.81%) 錯誤率的近似值。PFCOUNT key1 key2 key3.O(n).

  • PFMERGE: 將多個 key1 的內容合併到一個 key 中。PFMERGE target key1 key2.O(n),n 是 key 的數量。

geospatial index

  • GEOADD: 想指定的 key 中添加一個或者多個地理位置,格式爲經度,緯度,名稱.GEOADD key longitude latitude member [longitude latitude member ...]

  • GEOHASH: 返回一個或者多個 GEO 值的 hash.GEOHASH key member [member ...]

  • GEOPOS: 獲取某個成員的座標。GEOPOS key member [member ...]

  • GEODIST: 返回兩個成員之間的距離,可以指定多種單位。GEODIST key member1 member2 [unit].

  • GEORADIUS: 返回指定點爲球心,指定距離爲半徑內的座標集。GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]

  • GEORADIUSBYMEMBER: 與上一個命令相似,只是返回的是成員名稱。GEORADIUSBYMEMBER key member radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key].

聯繫我

最後,歡迎關注我的個人公衆號【 呼延十 】,會不定期更新很多後端工程師的學習筆記。
也歡迎直接公衆號私信或者郵箱聯繫我,一定知無不言,言無不盡。

完。


ChangeLog

2019-04-04 開始連載 2019-05-06 完成

以上皆爲個人所思所得,如有錯誤歡迎評論區指正。

歡迎轉載,煩請署名並保留原文鏈接。

聯繫郵箱:[email protected]

更多學習筆記見個人博客------>呼延十

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章