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

目錄

背景介紹

如下摘自:Redis 官網。python

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,具備半徑查詢的地理空間索引和流。git

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

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

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].

聯繫我

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

完。



<h4>ChangeLog</h4>
2019-04-04 開始連載
2019-05-06 完成

以上皆爲我的所思所得,若有錯誤歡迎評論區指正。

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

聯繫郵箱:huyanshi2580@gmail.com

更多學習筆記見我的博客------>呼延十

相關文章
相關標籤/搜索