Redis 內置的數據類型有 5種:字符串String、哈希Hash、列表List、集合Set、有序集合ZSet
字符串類型
String 是 Redis 中最基本的類型,一個 key 對應着一個 value,String 類型是二進制安全的,即其值可以存儲任何的類型,如圖片或者序列化后的對象,其一個鍵最大可以存儲 512MB 的數據。
字符串類型的操作
賦值操作
- Set key value [EX seconds] [PX milseconds] [NX|XX]
設置指定鍵的值,若不存在指定的 key,則添加,否則,則更新原有項。可選參數 EX 用於設置鍵值的過期時間,單位為秒,可選參數 PX 作用相同,不同的是其單位為毫秒,可選參數 NX 表示只有 key 不存在時才執行相應操作,XX 表示指定 key 存在時執行相應操作。
- SETNX key value
設置指定鍵的值,與上面的SET key value不同的是,該命令只有在 key 不存在時才添加,相當於先進行exists key判斷是否已存在是否已存在指定的 Key,只有前面的命令返回 0,即不存在指定的 key 時,在執行set key value。
- MSET key value [key value]
該命令開頭的M表示 Mutiple,這個命令用於同時設置多個鍵值,規則同SET key value,不存在則添加,否則,則更新,如MSET name tusk gender male。
- MSETNX
同時添加多個鍵值,與上面的MSET相對應,只有的指定的 key 不存在時才會執行添加操作
- SETRANGE key offset value
使用 value 值替換指定 key 項從 offset 偏移值開始的的值。例如,現有一個name:tom,
| 命令 | 結果 |
|---|---|
| SETRANGE name 1 T | Tom |
| SETRANGE name 6 T | tom\x00\x00\x00T |
| SETRANGE gender 5 gender | \x00\x00\x00\x00\x00\x00gender |
從上面的例子可以看出,當指定的 offset 大於原字符串的 len -1 時,兩者的差項會被使用 \x00 補齊,如果指定的 key 不存在,則會根據指定的 key、offset、value 創建一個新的項並添加。
取值操作
-
GET key
獲取指定的 key 的 value,如果不存在指定的 key,則返回 nil。
-
GETRANGE key start end
獲取指定的 key 的值中的子串,如果指定的 key 不存在則返回空串,必須指定 start 和 end 參數,當end - start值大於字符串的長度時,返回串本身。
-
GETSET key value
獲取指定 key 的值,並返回原來的值,如果指定的 key 不存在,則添加此項,返回 nil
-
MGET k1,k2
獲取指定的一個或多個 key 的值,指定 key 不存在時返回 nil
增量操作
-
INCR key
將 key 對應項的值增加 1,僅限對應值的類型為數值時有效,若對應項的值不為數值,則會發生錯誤
-
INCRBY key incresement
將 key 對應的項的值增加 incresement,若對應項不為整數數值,則會發生異常。
-
INCRBYFLOAT key increment
將 key 對應的項的值增加 increment,這里的 increment 為一個浮點數
-
DECR key
將 key 對應項的值減 1,對應項不為整數數值時發生錯誤
-
DECRBY key increment
將 key 對應項的值減 increment,對應項的值或 increment 不為整數時發生錯誤
生存時間設置
-
SETEX key seconds value
將值 value 關聯到 key ,並將 key 的過期時間設為 seconds (以秒為單位)
-
PSETEX key milliseconds value
這個命令和 SETEX 命令相似,但它以毫秒為單位設置 key 的生存時間,而不是像 SETEX 命令那樣,以秒為單位。
其它
- STRLEN key
獲取 key 對應項的長度,不存在時返回 0
Hash 類型
Redis 中的 Hash 是一個字符串類型的字段與值的映射表,適合與一些對象的存儲,Redis 中的每個 Hash 可以存儲 2^32 - 1 個鍵值對。
Hash 類型的操作
賦值
- HMSET k field1 value1 field2 value2..
添加一個新的 Hash 對象,若指定的 key 項已存在,后續的操作會覆蓋原來的項
- HSET key field value
將 key 指定的 Hash 對象的 field 對應的值設置為 value,當指定的 key 或 field 不存在時則添加。
- HSETNX key field value
作用同 HSET,不同的是,該命令只有在指定的 field 不存在時才會執行。
取值
- HGET key field
從 key 指定的 Hash 對象中獲取對應的值,若指定的 key 或 field 不存在,均返回 nil
- HMGET key field1 field2..
從 key 指定的 Hash 對象中獲取指定 filed 的值,不存在的 key 或 field 均返回 nil
- HGETALL key
返回 key 指定的 Hash 對象中的所有的減值對,key 不存在時返回 nil
增值操作
- HINCRBY key field increment
將 key 指定的 field 的值增加 increment ,對應項的值和 increment 必須為整數,increment 可以為負值
- HINCRBYFLOAT key field increment
將 key 指定的 field 的值增加,其中的對應項的值和 increment 均可以為 整數或浮點數,increment 可以為負值。
其它操作
-
HEXISTS key field
判斷指定的字段 field 是否存在於 key 指定的 Hash 對象中,如果存在返回 1,否則返回0
-
HDEL key field1 field2
刪除 key 指定的 Hash 對象的一個或多個字段,返回受影響的數目,當 key 或 field
不存在時,則忽略 -
HKEYS key
獲取 key 值指定的 Hash 對象中的所有的字段,當 key 不存在時輸出提示empty list or set
-
HLEN key
獲取 hash 表中字段的數量,當key不存在時返回 0
-
HVALS key
獲取 hash 表中的所有的值,當 key 不存在時,輸出提示:empty list or set
-
HSCAN key cursor [MATCH pattern] [COUNT count]
迭代哈希表中的鍵值對:Redis 中的Scan
列表類型
Redis 中的列表是簡單的字符串列表,按照插入的順序排序,一個列表最多可以存儲 **2^32 -1 ** 個元素。
列表類型的操作
插入(賦值)操作
-
LPUSH key value1 [value2]
在 key 指定的列表的頭部插入一個或多個值。當指定列表不存在時則創建后插入
-
LPUSHX key value1 [value2]
在 key 指定的列表頭部插入一個或多個值,與 **LPUSH ** 不同的是,該命令只有在 key 指定的列表存在時才執行。
-
RPUSH key value1 [value2]
在 key 指定的列表的尾部插入一個或多個值, 當指定列表不存在時則創建后插入。
-
RPUSHX key value1 [value2]
在 key 指定列表的尾部插入一個或多個值,只有指定的列表存在時才會執行插入。
-
LINSERT key before|after existValue newValue
在 key 指定的列表的指定元素 existValue 的元素的前面或后面插入元素 newValue,若 existValue 不存在則返回 -1,如果 key 不存在或者為空列表,則視為空列表,不執行任何操作,當 key 指定的對象不是列表對象時,會發生錯誤,當執行成功時,返回插入后列表的長度。
-
LSET key index value
通過索引來設置列表的值,當key指定的項不存在或不是列表類型時會發生錯誤,當指定的索引值無效時,發生錯誤,索引值可以為負值。
移除(取值)操作
-
LINDEX key index
通過索引獲取 key 指定的列表中的元素。當 key 指定的對象不存在或指定的索引無效時返回 nil,其中的索引可以為負值,表示倒序取值,當 key 指定的對象不是列表時,則會發生錯誤。
-
LPOP key
移除並返回 key 指定列表中的第一項,當指定類型不為列表時發生錯誤,當列表為空或不存在時返回 nil
-
RPOP key
移除並返回 key 指定的列表中的最后一項,當指定類型不為列表時發生錯誤,當列表為空或不存在時返回 nil
-
LREM key count value
從 key 指定的列表中移除 count 的絕對值個與 value 相等的項。當 count>0 時表示從列表的頭部向尾部進行搜索,當 count<0 時表示從列表的尾部向頭部進行搜索。
-
BLPOP key1 key2 timeout
移出並獲取列表的第一個元素, 如果列表沒有元素會阻塞列表直到等待超時或發現可彈出元素為止。當操作執行成功時返回兩個元素,第一個為移除元素所屬列表的 key,第二個為移除的元素,在指定多個列表的情況下,如指定兩個列表 k1 和 k2,則當且僅當 k1 為空時才對 k2 進行操作,timeout 指操作的超時時間,單位為秒,如果列表被阻塞或列表為空時,在指定的超時時間后返回 nil,當指定的 key 不為列表類型時,發生錯誤
-
RLPOP key1 key2 timeout
作用及用法同 BLPOP,不同的是該命令 移除的為列表的最后一個元素
其它命令
- LLEN key
獲取 key 對應的列表的長度,當 key 對應元素不為列表時發生錯誤
- LRANGE key start stop
獲取 key 對應的列表 start 和 stop 范圍內的元素,start 和 stop 均可以為負值,當 start 為負值時,總是返回empty list or set.
- LTRIM key start stop
對 key 指定的列表進行裁剪,即只保留索引值介於 start 和 stop 之間(包括兩端)的元素,其余元素會被刪除。start 和 stop 均可以為負值。表示倒序
* RPOPLPUSH source destination 移除 **source** 列表的最后一個元素並將其添加到 **destination** 列表中,若 **source** 列表為空則返回 **nil**
* BRPOPLPUSH LIST1 ANOTHER_LIST TIMEOUT 假如在指定時間內沒有任何元素被彈出,則返回一個 nil 和等待時長。 反之,返回一個含有兩個元素的列表,第一個元素是被彈出元素的值,第二個元素是等待時長。
集合
Redis 中的集合是一個字符串類型的無序集合,即集合中不存在重復的元素。集合中最大的元素個數為 2^32 -1 個,集合內部的操作是基於哈希表實現的,一次添加、查找、刪除操作的時間復雜度都為 O(1)
集合類型的操作
添加操作
- SADD key member1 [member2]
向 key 指定的集合中添加項,若集合不存在則創建后添加
集合操作
- SDIFF key1 [key2] [key3]
返回給定k1與其它所有集合的差集,如 SDIFF k1,k2,k3,則返回從 k1 從移除 k1 與 k3、k1 與 k2的所有交集項構成的集合,不影響原來的集合。當兩個集合 k1 和 k2 求差集時,若 k1 為空集合或不存在時返回empty list or set,當 k2 為空集合或不存在時,二者差集為集合 k1
- SDIFFSTORE destination key1 [key2]
作用同 SDIFF,不同的是會將差集結果存儲到 destination 中。
- SINTER k1 [k2]
獲取指定所有集合的交集,當 k1 為空集合或者不存在時,返回empty list or set
- SINTERSTORE destination k1 [k2]
作用同 SINTER,不同的是會將獲取的交集存儲到 destination 中
- SUNION k1 [k2]
獲取給定所有集合的並集
- SUNION destion k1 [k2]
作用同 SUNION,不同的是會將獲取的並集結果存儲到 destination 中
其它操作
- SCARD key
獲取 key 指定的結合中的項數
- SISMEMBER key member
判斷 member 是否屬於 key 指定的集合。屬於時返回 1,否則返回0
- SMEMBERS key
返回 key 指定集合中的所有的元素,當指定集合不存在時返回empty list or set
- SMOVE source destination member
將 member 從 source 移動到 destination 集合
- SPOP key
從 key 指定的集合中隨機移除一個元素並返回。當指定的集合不存在時,返回 nil
* SRANDMEMBER key [count] 隨機返回 **key** 指定的集合中的一個或多個元素,當集合不存在時返回 **nil**,當指定的 **count** 大於集合的長度時,返回集合中的所有的元素。
* SREM key member1 [memeber2] 移除集合中的一個或多個元素
* SSCAN KEY cursor [MATCH pattern] [COUNT count] 迭代返回集合中的元素
### 有序集合 有序集合與集合相同都是字符串類型的集合,也不允許出現重復的元素,不同的是,其中的每個元素都有一個與之相關聯的 **double** 類型的分數,**Redis** 便是根據這個分數對集合內部的元素進行的排序的。在一個有序集合中,不可以存在相同的項,但可以存在相同的分數。同普通集合相同,有序集合內部也是通過哈希表實現的,因此,其插入、查找、刪除的時間復雜度同樣都為 **O(1)**。集合中的元素個數最大為 `2^32 -1` 個。
有序集合的操作
插入操作
- ZADD key [NX |XX] [CH] [INCR] socore member [sorce2 member]
向一個有序集合中添加一個項,或更新現有項的分數。
計數操作
- ZCARD key
獲取有序集合中的項數
- ZCOUNT key min max
獲取 key 指定的有序集合中,分數介於min 和 max 之間的項數。默認是包含兩端的,如果不包含兩端的 min 和 max,如果要不包括兩端的值,可以寫作ZCOUNT key (min (max。
當指定集合不存在時返回0。
- ZLEXCOUNT key min max
獲取 key 指定的有序集合中,項的值(基於ASCLL碼值進行比較)介於 min 和 max 之間的項數,同 ZCOUNT 其默認也是包含兩端的。可以為 min 和 max 分別指定 - 和 + ,代表集合中的最小項和最大項。
索引操作
- ZRANK key member
返回指定項 member 在指定集合中的索引值。當該項在指定集合中不存在時返回 nil。當指定集合不存在時返回 nil
- ZREVRANK key member
作用同 ZRANK ,不同的是該命令獲取的索引值是集合中元素按照分數從高到底排列時的索引值。
- ZRANGE key start stop [WITHSCORES]
返回指定集合中索引值介於 start 和 stop (含兩端)之間的元素,返回的元素按照分數從低到高排列。 可選參數 WITHSCORES 表示是否在返回結果中包含對應項的 分數。其中的下標可以為負值。若需要返回結果的分數從大到小降序排列,請使用 ZREVRANGE
- ZREVRANK key start stop [WITHSCORES]
作用同 ZRANK,不同的是其返回元素集合中元素是按照分數從高到底降序排列的。
取值和移除操作
- ZRANGEBYLEX key min max [limit offset count]
通過字典區間返回有序集合的的成員。返回的集合,整體按照分數從低到高排列,每一組分數相同的部分,按照字典集合進行排序,如現有集合 zset,其中有成員:zadd zset 0 a 0 b 0 c 1 e 1 f 1 g 0 h,則調用 ZRANGEBYLEX zset [a [z,返回結果如下示:

- ZRANGEBYSCORE key min max [withscores] [limit offset count]
獲取分數介於 min 和 max 之間的元素,可設置是否包含兩端。可選參數 withscores 表示在返回結果集中是否包含對應項的分數,可選參數 limit 表示返回數據集的偏移量和返回元素的個數。返回結果集按照分數從低到高排列。
- ZREVRANGEBYSCORE key max min [WITHSCORES]
作用同 ZRANGEBYSCORE 不同的是其返回結果集的分數排列是從高到低的。 - ZREM key member1 [member2]
從 key 指定的集合中移除指定項,返回移除元素的個數,當指定 member 不存在與指定集合時則忽略。返回0.
- ZREMRANGEBYSCORE key min max
移除指定集合中 分數介於 **min ** 和 max 之間的元素,默認情況下是包含兩端的,可以使用(來排除兩端,當指定集合不存在時,返回0,其它情況返回刪除的元素個數。
其它
- ZSCORE key member
從 key 指定的集合中獲取 memeber 的分數,當 member 不屬於指定集合時,返回 nil
- ZINCRBY key increment member
在 key 指定的集合的 member 的分數上增加分量 increment。當 member 不存在與指定的集合時,便會將其添加到指定集合,其對應分數值為 increment。
- ZINTERSTORE destion keysnum key [ key2]
計算給定的一個或多個有序集的交集並將結果集存儲在新的有序集合 key 中。其中參數 destion 指定結果集存儲的集合,keysnum 表示要求交集的集合的個數。當該參數的值與指定的集合個數不一致時,發生錯誤。返回的交集結果集中,每個項的分數為原集合中對應項的分數之和。返回結果集合中元素的個數。
- ZSCAN key cursor [MATCH pattern] [COUNT count]
用於迭代有序集合中的元素(包括分數)
- ZUNIONSTORE destination numkeys key [key2]
計算一個或多個有序集合的交集,並將返回的結果集存儲到 destination 中。當指定的集合中包含相同的元素但分數不同時,默認情況下會計算兩個元素的分數之和來作為返回集合對應元素的分數的那個,但可以指定一個可選參數 Aggregate 來更改這一默認處理,該參數具有三個值:SUM | MAX | MIN。該命令還有一個可選參數:WEIGHTS,該參數表示給定的有序集合在傳遞給聚合函數之前,集合中成員的分數都會乘上這個因子,該值默認為1。
