Redis 是徹底開源的,遵照 BSD 協議,是一個高性能的 key-value 數據庫。redis
Redis 與其餘 key - value 緩存產品有如下三個特色:shell
官網聲稱能夠達到:10 萬 QPS數據庫
Redis 速度快的主要緣由就是內存segmentfault
從快到慢依次是:數組
類型 | 每秒讀寫次數 | 隨機讀寫延遲 | 訪問帶寬 |
---|---|---|---|
內存 | 千萬級 | 80ns | 5GB |
SSD 盤 | 35000 | 0.1-02ms | 100~300MB |
機械盤 | 100 左右 | 10ms | 100MB 左右 |
Redis 全部數據保存在內存當中,對數據的更新將以異步方式保存到磁盤上。緩存
Redis 支持兩種持久化方式:服務器
另外在 Redis 從 2.2.0 版本開始新增了三種數據結構:網絡
Bitmaps 和 HyperLogLog 其實本質上是字符串,並不算是真實的數據結構,而 GEO 本質上有序集合實現的。數據結構
• BitMaps:能夠實現對位的操做。能夠把 Bitmaps 想象成一個以位爲單位數組,數組中的每一個單元只能存 0 或者 1,數組的下標在 bitmaps 中叫作偏移量。單個 bitmaps 的最大長度是 512MB,即 2^32 個比特位。架構
• HyperLogLog:超小內存惟一值計數。特色是速度快,佔用空間小。
• GEO:地理信息定位。
主從複製是 Redis 保證高可用的基礎
Redis 提供了複製功能,實現了多個相同數據的 Redis 副本。
Redis 從 2.8 版本正式提供了高可用實現 Redis Sentinel,它可以保證 Redis 節點的故障發現和故障自動轉移。
Redis 從 3.0 版本正式提供了分佈式實現 Redis Cluster,它是 Redis 真正的分佈式實現,提供了高可用、讀寫和容量的擴展性。
wget http://download.redis.io/releases/redis-3.0.7.tar.gz tar -xzf redis-3.0.7.tar.gz ln -s redis-3.0.7 redis cd redis make && make install
進入 src 目錄下:
redis-server
命令以默認參數進行啓動。redis-server –port 6380
redis-server configPath
驗證:
ps -ef | grep redis
:(檢查 redis 進程是否啓動)netstat -antpl | grep redis
:(檢查 redis 服務端口是否存在)redis-cli -h ip -p port ping
:(檢查 redis 客戶端到 redis 服務端連通性)生產環境選擇配置啓動。
單機多實例配置文件能夠用端口區分。
使用下面命令進行啓動:
redis-server
redis-cli -h 127.0.0.1 -p 6379
鏈接成功後咱們就能夠作一些操做。
127.0.0.1:6379> set hello world OK 127.0.0.1:6379> get hello "world" 127.0.0.1:6379> ping PONG 127.0.0.1:6379>exit
查找全部符合給定模式 pattern
的 key
, 好比說:
KEYS *
匹配數據庫中全部 key
。KEYS h?llo
匹配 hello
, hallo
和 hxllo
等。KEYS h*llo
匹配 hllo
和 heeeeello
等。KEYS h[ae]llo
匹配 hello
和 hallo
,但不匹配 hillo
。
keys 是 O(n)複雜度因此通常不在生產環境使用,由於 Redis 是單線程架構,使用不當會致使 Redis 阻塞。
返回當前數據庫的 key 的數量。在 Redis 內部有一個計數器來維護 Key 的數量,因此它的複雜度是 O(1)。
檢查給定 key
是否存在。
若 key
存在,返回 1
,不然返回 0
。
刪除給定的一個或多個 key
。
返回被刪除 key
的數量。
爲給定 key
設置生存時間,當 key
過時時(生存時間爲 0
),它會被自動刪除。
設置成功返回 1
。 當 key
不存在或者不能爲 key
設置生存時間時,返回 0
。
以秒爲單位,返回給定 key
的剩餘生存時間(TTL, time to live)。
當 key
不存在時,返回 -2
。 當 key
存在但沒有設置剩餘生存時間時,返回 -1
。 不然,以秒爲單位,返回 key
的剩餘生存時間。
移除給定 key
的生存時間,並變爲永不過時的key
。
當生存時間移除成功時,返回 1
. 若是 key
不存在或 key
沒有設置生存時間,返回 0
。
返回 key
所儲存的值的類型。
返回值
none
(key 不存在)string
(字符串)list
(列表)set
(集合)zset
(有序集)hash
(哈希表)stream
(流)
redis 對外展示五種數據類型:
每種數據結構,redis 都提供了不一樣的內部編碼實現方式(內部編碼能夠經過object encoding key
查看),以便使用不一樣的場景。
127.0.0.1:6379> object encoding hello "embstr"
embstr 相較於 raw 有如下好處:
has-max-ziplist-entries
配置(默認 512 個),同時全部值都小於hash-max-ziplist-value
配置(默認 64 個字節)時,redis 會使用 ziplist 做爲哈希的內部實現。ziplist 使用更加緊湊的結構實現多個元素的連續存儲,因此在節省內存方面比 hashtable 更加優秀。set-max-intset-entries
配置(默認 512 個)是,redis 會選 intset 做爲集合的內部實現,從而減小內存使用。zset-max-ziplist-entries
配置(默認 128 個)同時每一個元素的值小於zset-max-ziplist-value
配置(默認 64 個字節)時,Redis 會用 ziplist 來做爲有序集合的內部實現,ziplist 能夠有效減小內存使用。特色
經常使用的字符串場景
返回與鍵 key
相關聯的字符串值。
若是鍵 key
不存在, 那麼返回特殊值 nil
; 不然, 返回鍵 key
的值。
若是鍵 key
的值並不是字符串類型, 那麼返回一個錯誤, 由於 GET
命令只能用於字符串值。
將字符串值 value
關聯到 key
。
若是 key
已經持有其餘值, SET
就覆寫舊值, 無視類型。
當 SET
命令對一個帶有生存時間(TTL)的鍵進行設置以後, 該鍵原有的 TTL 將被清除。
刪除給定的一個或多個 key
。
返回被刪除 key
的數量。
爲鍵 key
儲存的數字值加上一。
若是鍵 key
不存在, 那麼它的值會先被初始化爲 0
, 而後再執行 INCR
命令。
若是鍵 key
儲存的值不能被解釋爲數字, 那麼 INCR
命令將返回一個錯誤。
本操做的值限制在 64 位(bit)有符號數字表示以內。
INCR
命令會返回鍵 key
在執行加一操做以後的值。
爲鍵 key
儲存的數字值減去一。
若是鍵 key
不存在, 那麼鍵 key
的值會先被初始化爲 0
, 而後再執行 DECR
操做。
若是鍵 key
儲存的值不能被解釋爲數字, 那麼 DECR
命令將返回一個錯誤。
本操做的值限制在 64 位(bit)有符號數字表示以內。
DECR
命令會返回鍵 key
在執行減一操做以後的值。
爲鍵 key
儲存的數字值加上增量 increment
。
若是鍵 key
不存在, 那麼鍵 key
的值會先被初始化爲 0
, 而後再執行 INCRBY
命令。
若是鍵 key
儲存的值不能被解釋爲數字, 那麼 INCRBY
命令將返回一個錯誤。
本操做的值限制在 64 位(bit)有符號數字表示以內。
在加上增量 increment
以後, 返回鍵 key
當前的值。
將鍵 key
儲存的整數值減去減量 decrement
。
若是鍵 key
不存在, 那麼鍵 key
的值會先被初始化爲 0
, 而後再執行 DECRBY
命令。
若是鍵 key
儲存的值不能被解釋爲數字, 那麼 DECRBY
命令將返回一個錯誤。
本操做的值限制在 64 位(bit)有符號數字表示以內。
DECRBY
命令會返回鍵在執行減法操做以後的值。
只在鍵 key
不存在的狀況下, 將鍵 key
的值設置爲 value
。
若鍵 key
已經存在, 則 SETNX
命令不作任何動做。
SETNX
是『SET if Not eXists』(若是不存在,則 SET)的簡寫。
命令在設置成功時返回 1
, 設置失敗時返回 0
。
將鍵 key
的值設置爲 value
, 並將鍵 key
的生存時間設置爲 seconds
秒鐘。
若是鍵 key
已經存在, 那麼 SETEX
命令將覆蓋已有的值。
SETEX
命令的效果和如下兩個命令的效果相似:
SET key value EXPIRE key seconds # 設置生存時間
SETEX
和這兩個命令的不一樣之處在於 SETEX
是一個原子性(atomic)操做, 它能夠在同一時間內完成設置值和設置過時時間這兩個操做, 所以 SETEX
命令在儲存緩存的時候很是實用。
命令在設置成功時返回 OK
。 當 seconds
參數不合法時, 命令將返回一個錯誤。
API:SETEX key seconds value
127.0.0.1:6379> setex jack 60 nihao OK
返回給定的一個或多個字符串鍵的值。
若是給定的字符串鍵裏面, 有某個鍵不存在, 那麼這個鍵的值將以特殊值 nil
表示。
MGET
命令將返回一個列表, 列表中包含了全部給定鍵的值。
同時爲多個鍵設置值。
若是某個給定鍵已經存在, 那麼 MSET
將使用新值去覆蓋舊值。
MSET
是一個原子性(atomic)操做, 全部給定鍵都會在同一時間內被設置, 不會出現某些鍵被設置了可是另外一些鍵沒有被設置的狀況。
MSET
命令老是返回 OK
。
當且僅當全部給定鍵都不存在時, 爲全部給定鍵設置值。
即便只有一個給定鍵已經存在, MSETNX
命令也會拒絕執行對全部鍵的設置操做。
MSETNX
是一個原子性(atomic)操做, 全部給定鍵要麼就所有都被設置, 要麼就所有都不設置, 不可能出現第三種狀態。
當全部給定鍵都設置成功時, 命令返回 1
; 若是由於某個給定鍵已經存在而致使設置未能成功執行, 那麼命令返回 0
。
API:MSETNX key value [key value …]
127.0.0.1:6379> msetnx jack1 h jack2 e jack3 l #對不存在的key設置value (integer) 1 127.0.0.1:6379> msetnx jack1 h jack2 e jack3 l #對存在的key設置value (integer) 0 127.0.0.1:6379> mget jack1 jack2 jack3 #批量獲取key 1) "h" 2) "e" 3) "l" 127.0.0.1:6379>
將鍵 key
的值設爲 value
, 並返回鍵 key
在被設置以前的舊值。
若是鍵 key
沒有舊值, 也便是說, 鍵 key
在被設置以前並不存在, 那麼命令返回 nil
。
當鍵 key
存在但不是字符串類型時, 命令返回一個錯誤。
若是鍵 key
已經存在而且它的值是一個字符串, APPEND
命令將把 value
追加到鍵 key
現有值的末尾。
若是 key
不存在, APPEND
就簡單地將鍵 key
的值設爲 value
, 就像執行 SET key value
同樣。
追加 value
以後, 返回鍵 key
的值的長度。
返回鍵 key
儲存的字符串值的長度。
STRLEN
命令返回字符串值的長度。
當鍵 key
不存在時, 命令返回 0
。
當 key
儲存的不是字符串值時, 返回一個錯誤。
爲鍵 key
儲存的值加上浮點數增量 increment
。
若是鍵 key
不存在, 那麼 INCRBYFLOAT
會先將鍵 key
的值設爲 0
, 而後再執行加法操做。
若是命令執行成功, 那麼鍵 key
的值會被更新爲執行加法計算以後的新值, 而且新值會以字符串的形式返回給調用者。
當如下任意一個條件發生時, 命令返回一個錯誤:
key
的值不是字符串類型(由於 Redis 中的數字和浮點數都以字符串的形式保存,因此它們都屬於字符串類型);key
當前的值或者給定的增量 increment
不能被解釋(parse)爲雙精度浮點數。在加上增量 increment
以後, 返回鍵 key
的值。
返回鍵 key
儲存的字符串值的指定部分, 字符串的截取範圍由 start
和 end
兩個偏移量決定 (包括 start
和 end
在內)。
負數偏移量表示從字符串的末尾開始計數, -1
表示最後一個字符, -2
表示倒數第二個字符, 以此類推。
GETRANGE
命令會返回字符串值的指定部分。
從偏移量 offset
開始, 用 value
參數覆寫鍵 key
儲存的字符串值。
SETRANGE
命令會返回被修改以後, 字符串值的長度。
例如上圖中,user:1:info
爲 key,name,age,Date
爲 user 這個 key 的一些屬性,value 是屬性對應的值。
在 hash 中,能夠爲 key 添加一個新的屬性和新的值。
好比使用下面的命令向user:1:info
這個 key 添加一個新屬性 viewCounter,屬性對應的值爲 100。
hset user:1:info viewCounter 100
特色:
適用場景:
hash 變動的數據 user name age,尤爲是是用戶信息之類的,常常變更的信息。hash 更適合於對象的 存儲,String 更加適合字符串存儲!
HGET
命令在默認狀況下返回給定域的值。
若是給定域不存在於哈希表中, 又或者給定的哈希表並不存在, 那麼命令返回 nil
。
將哈希表 hash
中域 field
的值設置爲 value
。
若是給定的哈希表並不存在, 那麼一個新的哈希表將被建立並執行 HSET
操做。
若是域 field
已經存在於哈希表中, 那麼它的舊值將被新值 value
覆蓋。
當 HSET
命令在哈希表中新建立 field
域併成功爲它設置值時, 命令返回 1
; 若是域 field
已經存在於哈希表, 而且 HSET
命令成功使用新值覆蓋了它的舊值, 那麼命令返回 0
。
當且僅當域 field
還沒有存在於哈希表的狀況下, 將它的值設置爲 value
。
若是給定field
已經存在於哈希表當中, 那麼命令將放棄執行設置操做。
若是哈希表 hash
不存在, 那麼一個新的哈希表將被建立並執行 HSETNX
命令。
HSETNX
命令在設置成功時返回 1
, 在給定域已經存在而放棄執行設置操做時返回 0
。
刪除哈希表 key
中的一個或多個指定域,不存在的域將被忽略。
返回被成功移除的域的數量,不包括被忽略的域。
檢查給定域 field
是否存在於哈希表 hash
當中。
HEXISTS
命令在給定域存在時返回 1
, 在給定域不存在時返回 0
。
返回哈希表 key
中field
的數量。
返回哈希表中field
的數量。當 key
不存在時,返回 0
。
返回哈希表 key
中,一個或多個給定域的值。
若是給定的域不存在於哈希表,那麼返回一個 nil
值。
由於不存在的 key
被看成一個空哈希表來處理,因此對一個不存在的 key
進行 HMGET 操做將返回一個只帶有 nil
值的表。
同時將多個 field-value
(域-值)對設置到哈希表 key
中。
此命令會覆蓋哈希表中已存在的域。
若是 key
不存在,一個空哈希表被建立並執行 HMSET 操做。
若是命令執行成功,返回 OK
。
當 key
不是哈希表(hash)類型時,返回一個錯誤。
返回哈希表 key
中,全部的域和值。
在返回值裏,緊跟每一個域(field)以後是域的值(value),因此返回值的長度是哈希表大小的兩倍。
返回哈希表 key
中全部field
的值。
當 key
不存在時,返回一個空表。
返回哈希表 key
中的全部field
。
當 key
不存在時,返回一個空表。
爲哈希表 key
中的域 field
的值加上增量 increment
。
增量也能夠爲負數,至關於對給定域進行減法操做。
若是 key
不存在,一個新的哈希表被建立並執行 HINCRBY 命令。
若是域 field
不存在,那麼在執行命令前,域的值被初始化爲 0
。
對一個儲存字符串值的域 field
執行 HINCRBY 命令將形成一個錯誤。
本操做的值被限制在 64 位(bit)有符號數字表示以內。
最終返回哈希表 key
中域 field
的新值。
特色:
適用場景:
將一個或多個值 value
插入到列表 key
的表尾(最右邊)。
若是有多個 value
值,那麼各個 value
值按從左到右的順序依次插入到表尾。
若是 key
不存在,一個空列表會被建立並執行 RPUSH 操做。
當 key
存在但不是列表類型時,返回一個錯誤。
執行 RPUSH 操做後,返回列表的長度。
將一個或多個值 value
插入到列表 key
的表頭
若是有多個 value
值,那麼各個 value
值按從左到右的順序依次插入到表頭。
若是 key
不存在,一個空列表會被建立並執行 LPUSH 操做。
當 key
存在但不是列表類型時,返回一個錯誤。
執行 LPUSH 操做後,返回列表的長度。
將值 value
插入到列表 key
當中,位於值 pivot
以前或以後。
當 pivot
不存在於列表 key
時,不執行任何操做。
當 key
不存在時, key
被視爲空列表,不執行任何操做。
若是 key
不是列表類型,返回一個錯誤。
若是命令執行成功,返回插入操做完成以後,列表的長度。
若是沒有找到 pivot
,返回 -1
。 若是 key
不存在或爲空列表,返回 0
。
移除並返回列表 key
的頭元素。
執行成功返回列表的頭元素。 當 key
不存在時,返回 nil
。
移除並返回列表 key
的尾元素。
執行成功返回列表的尾元素。 當 key
不存在時,返回 nil
。
根據參數 count
的值,移除列表中與參數 value
相等的元素。
count
的值能夠是如下幾種:
count > 0
: 從表頭開始向表尾搜索,移除與 value
相等的元素,數量爲 count
。count < 0
: 從表尾開始向表頭搜索,移除與 value
相等的元素,數量爲 count
。count = 0
: 移除表中全部與 value
相等的值。返回被移除元素的數量。 由於不存在的 key
被視做空表(empty list),因此當 key
不存在時,返回 0
。
對一個列表進行修剪,也就是說,讓列表只保留指定區間內的元素,不在指定區間以內的元素都將被刪除。
當 key
不是列表類型時,返回一個錯誤。
須要注意的是:
stop
下標比 end
下標還要大,Redis 將 stop
的值設置爲 end
。命令執行成功時,返回 ok
。
返回列表 key
中指定區間內的元素,區間以偏移量 start
和 stop
指定。
須要注意的是:
stop
下標比 end
下標還要大,Redis 將 stop
的值設置爲 end
。start
和stop
。命令執行成功時,返回指定區間內的元素。
返回列表 key
中,下標爲 index
的元素。
以 0
表示列表的第一個元素,以 1
表示列表的第二個元素,以此類推。
也可使用負數下標,以 -1
表示列表的最後一個元素, -2
表示列表的倒數第二個元素,以此類推。
返回列表 key
的長度。
若是 key
不存在,則 key
被解釋爲一個空列表,返回 0
.
若是 key
不是列表類型,返回一個錯誤。
將列表 key
下標爲 index
的元素的值設置爲 value
。
當 index
參數超出範圍,或對一個空列表( key
不存在)進行 LSET 時,返回一個錯誤。
操做成功返回 ok
,不然返回錯誤。
BLPOP 是列表的阻塞式(blocking)彈出。
當給定列表內沒有任何元素可供彈出的時候,鏈接將被阻塞,直到等待超時或發現可彈出元素爲止。
當存在多個給定 key
時,按給定 key
參數排列的前後順序,依次檢查各個列表。
超時參數 timeout
接受一個以秒爲單位的數字做爲值。超時參數設爲 0
表示阻塞時間能夠無限期延長(block indefinitely) 。
API:BLPOP key [key …] timeout
127.0.0.1:6379> blpop list1 list2 0 # 無限期阻塞 1) "list1" # 用另外一個鏈接 lpush list1 a 2) "a" # 被彈出的值 (30.31s)
BLPOP 保證返回的元素來自第一個非空的列表 ,由於它是按」查找 list1
-> 查找 list2
這樣的順序,第一個找到的非空列表。
若是列表爲空,返回一個 nil
。 不然,返回一個含有兩個元素的列表,第一個元素是被彈出元素所屬的 key
,第二個元素是被彈出元素的值。
BRPOP 和 BLPOP 命令正好相反,就不演示了。
左邊爲 key 是字符串類型,右邊爲 values,能夠將一些字符串進行一些組合,能夠向 value 中添加或者刪除一個元素。
特色:
適用場景:
將一個或多個 member
元素加入到集合 key
當中,已經存在於集合的 member
元素將被忽略。
假如 key
不存在,則建立一個只包含 member
元素做成員的集合。
當 key
不是集合類型時,返回一個錯誤。
返回被添加到集合中的新元素的數量,不包括被忽略的元素。
移除集合 key
中的一個或多個 member
元素,不存在的 member
元素會被忽略。
當 key
不是集合類型,返回一個錯誤。
返回被成功移除的元素的數量,不包括被忽略的元素。
返回集合 key
的基數(集合中元素的數量)。
集合的基數。 當 key
不存在時,返回 0
。
API:SCARD key
127.0.0.1:6379> sadd myset a b c d e f (integer) 6 127.0.0.1:6379> scard myset (integer) 6
判斷 member
元素是否集合 key
的成員。
若是 member
元素是集合的成員,返回 1
。 若是 member
元素不是集合的成員,或 key
不存在,返回 0
。
API:SISMEMBER key member
127.0.0.1:6379> sismember myset a #存在 (integer) 1 127.0.0.1:6379> sismember myset z #不存在 (integer) 0
若是命令執行時,只提供了 key
參數,那麼返回集合中的一個隨機元素。
從 Redis 2.6 版本開始, 接受可選的 count
參數:
count
爲正數,且小於集合基數,那麼命令返回一個包含 count
個元素的數組,數組中的元素各不相同。若是 count
大於等於集合基數,那麼返回整個集合。count
爲負數,那麼命令返回一個數組,數組中的元素可能會重複出現屢次,而數組的長度爲 count
的絕對值。只提供 key
參數時,返回一個元素;若是集合爲空,返回 nil
。 若是提供了 count
參數,那麼返回一個數組;若是集合爲空,返回空數組。
API:SRANDMEMBER key [count]
127.0.0.1:6379> srandmember myset #不填count 隨機返回一個 "b" 127.0.0.1:6379> srandmember myset 2 # count爲正數 1) "e" 2) "f" 127.0.0.1:6379> srandmember myset -2 # count爲負數 1) "e" 2) "a" 127.0.0.1:6379> srandmember myset -2 # count爲負數 1) "f" 2) "f"
返回集合 key
中的全部成員。
不存在的 key
被視爲空集合。
API:SMEMBERS key
127.0.0.1:6379> smembers myset 1) "a" 2) "e" 3) "d" 4) "f" 5) "c" 6) "b"
移除並返回集合中的一個隨機元素。
返回被移除的隨機元素。 當 key
不存在或 key
是空集時,返回 nil
。
API:SPOP key
127.0.0.1:6379> spop myset "d"
返回一個集合的所有成員,該集合是全部給定集合的交集。
不存在的 key
被視爲空集。
當給定集合當中有一個空集時,結果也爲空集(根據集合運算定律)。
API:SINTER key [key …]
127.0.0.1:6379> smembers set1 1) "a" 2) "c" 3) "d" 4) "b" 5) "e" 127.0.0.1:6379> smembers set2 1) "d" 2) "b" 3) "e" 127.0.0.1:6379> sinter set1 set2 #獲取兩遍都存在的數據 1) "d" 2) "b" 3) "e"
返回一個集合的所有成員,該集合是全部給定集合的並集。
不存在的 key
被視爲空集。
API:SUNION key [key …]
127.0.0.1:6379> sunion set1 set2 #獲取並集 1) "a" 2) "e" 3) "d" 4) "c" 5) "b"
返回一個集合的所有成員,該集合是全部給定集合之間的差集。
不存在的 key
被視爲空集。
API:SDIFF key [key …]
127.0.0.1:6379> sdiff set1 set2 #獲取差集 1) "a" 2) "c"
左邊爲 key,是字符串類型。右邊爲 value,由兩部分組成:score 和 value score 表示分值,表示 value 在有序集合中的位置。
集合與有序集合的區別
列表與有序集合的區別
特色:
將 Set 中的元素增長一個權重參數 score,元素按 score 有序排列,自然排序。
適用場景:
將一個或多個 member
元素及其 score
值加入到有序集 key
當中。
若是某個 member
已是有序集的成員,那麼更新這個 member
的 score
值,並經過從新插入這個 member
元素,來保證該 member
在正確的位置上。
score
值能夠是整數值或雙精度浮點數。
若是 key
不存在,則建立一個空的有序集並執行 ZADD 操做。
當 key
存在但不是有序集類型時,返回一個錯誤。
返回被成功添加的新成員的數量,不包括那些被更新的、已經存在的成員。
移除有序集 key
中的一個或多個成員,不存在的成員將被忽略。
當 key
存在但不是有序集類型時,返回一個錯誤。
返回被成功移除的成員的數量,不包括被忽略的成員。
返回有序集 key
中,成員 member
的 score
值。
若是 member
元素不是有序集 key
的成員,或 key
不存在,返回 nil
。
爲有序集 key
的成員 member
的 score
值加上增量 increment
。
能夠經過傳遞一個負數值 increment
,讓 score
減去相應的值。
當 key
不存在,或 member
不是 key
的成員時, ZINCRBY key increment member
等同於 ZADD key increment member
。
當 key
不是有序集類型時,返回一個錯誤。
score
值能夠是整數值或雙精度浮點數。
member
成員的新 score
值,以字符串形式表示。
當 key
存在且是有序集類型時,返回有序集的基數。 當 key
不存在時,返回 0
。
返回有序集 key
中,指定區間內的成員。
其中成員的位置按 score
值遞增(從小到大)來排序。
若是須要從大到小可使用ZREVRANGE
命令。
下標從 0 開始,stop
參數的值比有序集的最大下標還要大,那麼 Redis 將 stop
看成最大下標來處理。
能夠經過使用 WITHSCORES
選項,來讓成員和它的 score
值一併返回。
API:ZRANGE key start stop [WITHSCORES]
127.0.0.1:6379> zadd zset 10 a 20 b 30 c 40 d 50 e (integer) 5 127.0.0.1:6379> zrange zset 0 2 1) "a" 2) "b" 3) "c" 127.0.0.1:6379> zrange zset 0 2 withscores 1) "a" 2) "10" 3) "b" 4) "20" 5) "c" 6) "30"
返回有序集 key
中,全部 score
值介於 min
和 max
之間(包括等於 min
或 max
)的成員。有序集成員按 score
值遞增(從小到大)次序排列。
可選的 LIMIT
參數指定返回結果的數量及區間(就像 SQL 中的 SELECT LIMIT offset, count
),注意當 offset
很大時,定位 offset
的操做可能須要遍歷整個有序集,此過程最壞複雜度爲 O(N) 時間。
能夠經過使用 WITHSCORES
選項,來讓成員和它的 score
值一併返回。
min
和 max
能夠是 -inf
和 +inf
,這樣一來,你就能夠在不知道有序集的最低和最高 score
值的狀況下,使用這類命令。
API:ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
127.0.0.1:6379> ZRANGEBYSCORE zset 10 50 withscores 1) "a" 2) "10" 3) "b" 4) "20" 5) "c" 6) "30" 7) "d" 8) "40" 9) "e" 10) "50" 127.0.0.1:6379> ZRANGEBYSCORE zset -inf +inf 1) "a" 2) "b" 3) "c" 4) "d" 5) "e"
返回有序集 key
中, score
值在 min
和 max
之間(默認包括 score
值等於 min
或 max
)的成員的數量。
返回score
值在 min
和 max
之間的成員的數量。
API:ZCOUNT key min max
127.0.0.1:6379> zcount zset 10 30 (integer) 3
移除有序集 key
中,指定排名(rank)區間內的全部成員。
區間分別如下標參數 start
和 stop
指出,包含 start
和 stop
在內。
下標參數 start
和 stop
都以 0
爲底,也就是說,以 0
表示有序集第一個成員,以 1
表示有序集第二個成員,以此類推。 你也可使用負數下標,以 -1
表示最後一個成員, -2
表示倒數第二個成員,以此類推。
返回被移除成員的數量。
API:ZREMRANGEBYRANK key start stop
127.0.0.1:6379> zrange zset 0 100 withscores 1) "a" 2) "10" 3) "b" 4) "20" 5) "c" 6) "30" 7) "d" 8) "40" 9) "e" 10) "50" 127.0.0.1:6379> ZREMRANGEBYRANK zset 0 1 (integer) 2 127.0.0.1:6379> zrange zset 0 100 withscores 1) "c" 2) "30" 3) "d" 4) "40" 5) "e" 6) "50"
移除有序集 key
中,全部 score
值介於 min
和 max
之間(包括等於 min
或 max
)的成員。
返回被移除成員的數量。
API:ZREMRANGEBYSCORE key min max
127.0.0.1:6379> zremrangebyscore zset 40 50 (integer) 2
計算給定的一個或多個有序集的交集,其中給定 key
的數量必須以 numkeys
參數指定,並將該交集(結果集)儲存到 destination
。
默認狀況下,結果集中某個成員的 score
值是全部給定集下該成員 score
值之和。
返回保存到 destination
的結果集的基數。
API:ZINTERSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]] [AGGREGATE SUM|MIN|MAX]
127.0.0.1:6379> zadd test1 10 a 20 b 30 c 40 d 50 e (integer) 5 127.0.0.1:6379> zadd test2 10 a 20 b 30 c 40 d 50 e (integer) 5 127.0.0.1:6379> ZINTERSTORE sum_point 2 test1 test2 (integer) 5 127.0.0.1:6379> zrange sum_point 0 -1 withscores 1) "a" 2) "20" 3) "b" 4) "40" 5) "c" 6) "60" 7) "d" 8) "80" 9) "e" 10) "100"
計算給定的一個或多個有序集的並集,其中給定 key
的數量必須以 numkeys
參數指定,並將該並集(結果集)儲存到 destination
。
默認狀況下,結果集中某個成員的 score
值是全部給定集下該成員 score
值之 和 。
WEIGHTS
使用 WEIGHTS
選項,你能夠爲 每一個 給定有序集 分別 指定一個乘法因子(multiplication factor),每一個給定有序集的全部成員的 score
值在傳遞給聚合函數(aggregation function)以前都要先乘以該有序集的因子。
若是沒有指定 WEIGHTS
選項,乘法因子默認設置爲 1
。
AGGREGATE
使用 AGGREGATE
選項,你能夠指定並集的結果集的聚合方式。
默認使用的參數 SUM
,能夠將全部集合中某個成員的 score
值之 和 做爲結果集中該成員的 score
值;使用參數 MIN
,能夠將全部集合中某個成員的 最小 score
值做爲結果集中該成員的 score
值;而參數 MAX
則是將全部集合中某個成員的 最大 score
值做爲結果集中該成員的 score
值。
返回保存到 destination
的結果集的基數。
127.0.0.1:6379> zrange test3 0 -1 withscores 1) "a" 2) "10" 3) "b" 4) "20" 127.0.0.1:6379> zrange test4 0 -1 withscores 1) "a" 2) "10" 3) "b" 4) "20" 5) "c" 6) "30" 7) "d" 8) "40" 127.0.0.1:6379> zunionstore test5 2 test4 test5 weights 1 3 (integer) 4 127.0.0.1:6379> zrange test5 0 -1 withscores 1) "a" 2) "10" 3) "b" 4) "20" 5) "c" 6) "30" 7) "d" 8) "40"