數據類型
-
String 字符串
二進制安全的。意思是redis的string可以包含任何數據。比如jpg圖片或者序列化的對象 。 -
Hash 哈希
string 類型的 field 和 value 的映射表,hash 特別適合用于存儲對象。 -
List 列表
簡單的字符串列表,按照插入順序排序。你可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)。 -
Set 集合
string類型的無序集合。
集合是通過哈希表實現的,所以添加,刪除,查找的復雜度都是O(1)。 -
Sorted Set 有序集合
和 set 一樣也是string類型元素的集合,且不允許重復的成員。
不同的是每個元素都會關聯一個double類型的分數。redis正是通過分數來為集合中的成員進行從小到大的排序。
zset的成員是唯一的,但分數(score)卻可以重復。
String 字符串
SET key value / GET key
設置/獲取指定 key 的值
redis 127.0.0.1:6379> SET name "hongxi"
OK
redis 127.0.0.1:6379> GET name
"hongxi"
GETRANGE key start end
獲取存儲在指定 key 中字符串的子字符串,字符串的截取范圍由 start 和 end 兩個偏移量決定(包括 start 和 end 在內)。
redis 127.0.0.1:6379> SET title "hello world"
OK
redis 127.0.0.1:6379> GETRANGE title 0 3
"hell"
redis 127.0.0.1:6379> GETRANGE mykey 0 -1
"hello world"
127.0.0.1:6379> getrange title 0 -3
"hello wor"
GETSET key value
設置指定 key 的值,并返回 key 的舊值。
redis> GETSET db mongodb # 沒有舊值,返回 nil
(nil)
redis> GET db
"mongodb"
redis> GETSET db redis # 返回舊值 mongodb
"mongodb"
redis> GET db
"redis"
MSET key1 value1 key2 value2 .. keyN valueN
同時設置一個或多個 key-value 對
redis 127.0.0.1:6379> MSET key1 "Hello" key2 "World"
OK
MSETNX key1 value1 key2 value2 .. keyN valueN
原子性操作,用于所有給定 key 都不存在時,同時設置一個或多個 key-value 對。
MGET key1 key2 .. keyn
*返回所有(一個或多個)給定 key 的值。 如果給定的 key 里面,有某個 key 不存在,那么這個 key 返回特殊值 nil *
SETEX key timeout value
為指定的 key 設置值及其過期時間。如果 key 已經存在, SETEX 命令將會替換舊的值。(單位為秒)
redis 127.0.0.1:6379> SETEX mykey 60 redis
OK
redis 127.0.0.1:6379> TTL mykey
60
redis 127.0.0.1:6379> GET mykey
"redis
PSETEX key1 EXPIRY_IN_MILLISECONDS value1
以毫秒為單位設置 key 的生存時間。
SETNX key value
(SET if Not eXists) 命令在指定的 key 不存在時,為 key 設置指定的值。
redis> EXISTS job # job 不存在
(integer) 0
redis> SETNX job "programmer" # job 設置成功
(integer) 1
redis> SETNX job "code-farmer" # 嘗試覆蓋 job ,失敗
(integer) 0
redis> GET job # 沒有被覆蓋
"programmer"
SETRANGE key offset value
用指定的字符串覆蓋給定 key 所儲存的字符串值,覆蓋的位置從偏移量 offset 開始。
redis 127.0.0.1:6379> SET key1 "Hello World"
OK
redis 127.0.0.1:6379> SETRANGE key1 6 "Redis"
(integer) 11
redis 127.0.0.1:6379> GET key1
"Hello Redis"
APPEND key value
為指定的 key 追加值。
如果 key 已經存在并且是一個字符串, APPEND 命令將 value 追加到 key 原來的值的末尾。
如果 key 不存在, APPEND 就簡單地將給定 key 設為 value ,就像執行 SET key value 一樣。
# 對不存在的 key 執行 APPEND
redis> EXISTS myphone # 確保 myphone 不存在
(integer) 0
redis> APPEND myphone "nokia" # 對不存在的 key 進行 APPEND ,等同于 SET myphone "nokia"
(integer) 5 # 字符長度
# 對已存在的字符串進行 APPEND
redis> APPEND myphone " - 1110" # 長度從 5 個字符增加到 12 個字符
(integer) 12
redis> GET myphone
"nokia - 1110"
STRLEN key
用于獲取指定 key 所儲存的字符串值的長度。當 key 不存在時,返回 0。當 key 儲存的不是字符串值時,返回一個錯誤。
INCR key & DECR key
將 key 中儲存的數字值增/減一。如果 key 不存在,那么 key 的值會先被初始化為 0 ,然后再執行 INCR/DECR 操作。也就是變成1/-1
127.0.0.1:6379> INCR count
(integer) 1
127.0.0.1:6379> GET count
"1"
127.0.0.1:6379>
INCRBY key incr_amount & DECRBY key decr_amount
將 key 中儲存的數字加上/減掉指定的增量值。
redis> SET rank 50
OK
redis> INCRBY rank 20
(integer) 70
redis> GET rank
"70"
INCRBYFLOAT key incr_amount
為 key 中所儲存的值加上指定的浮點數增量值。
# 值和增量都不是指數符號
redis> SET mykey 10.50
OK
redis> INCRBYFLOAT mykey 0.1
"10.6"
# 值和增量都是指數符號
redis> SET mykey 314e-2
OK
redis> GET mykey # 用 SET 設置的值可以是指數符號
"314e-2"
redis> INCRBYFLOAT mykey 0 # 但執行 INCRBYFLOAT 之后格式會被改成非指數符號
"3.14"
# 可以對整數類型執行
redis> SET mykey 3
OK
redis> INCRBYFLOAT mykey 1.1
"4.1"
# 后跟的 0 會被移除
redis> SET mykey 3.0
OK
redis> GET mykey # SET 設置的值小數部分可以是 0
"3.0"
redis> INCRBYFLOAT mykey 1.000000000000000000000 # 但 INCRBYFLOAT 會將無用的 0 忽略掉,有需要的話,將浮點變為整數
"4"
redis> GET mykey
"4"
2.Hash 哈希
hash 是一個string類型的field和value的映射表,hash特別適合用于存儲對象。
HSET key filed value
HMSET key field1 value1 ...filedN valueN
HGET key filed
HKEYS key & HVALS key
獲取所有哈希表中的字段/值
HGETALL key
獲取在哈希表中指定 key 的所有字段和值
HLEN key
獲取哈希表中字段的數量
HEXISTS KEY_NAME FIELD_NAME
查看哈希表 key 中,指定的字段是否存在。
HDEL key filed1.. filedN
刪除一個或多個哈希表字段
redis 127.0.0.1:6379> HMSET myhash field1 "Hello" field2 "World"
OK
redis 127.0.0.1:6379> HGET myhash field1
"Hello"
redis 127.0.0.1:6379> HGET myhash field2
"World"
redis 127.0.0.1:6379> HEXISTS myhash field1
(integer) 1
redis 127.0.0.1:6379> HEXISTS myhash field3
(integer) 0
HINCRBY key filed incr_by_num
如果哈希表的 key 不存在,一個新的哈希表被創建并執行 HINCRBY 命令。
如果指定的字段不存在,那么在執行命令前,字段的值被初始化為 0 。
INCRBYFLOAT key incr_amount
同上, 為 key 中所儲存的值加上指定的浮點數增量值。
redis> HSET myhash field 5
(integer) 1
redis> HINCRBY myhash field 1
(integer) 6
redis> HINCRBY myhash field -1
(integer) 5
127.0.0.1:6379> HSET mykey a 10.50
(integer) 1
127.0.0.1:6379> HINCRBYFLOAT mykey a 0.1
"10.6"
HSETNX key field value
只有在字段 field 不存在時,設置哈希表字段的值。
redis 127.0.0.1:6379> HSETNX myhash field1 "foo"
(integer) 1
redis 127.0.0.1:6379> HSETNX myhash field1 "bar"
(integer) 0
redis 127.0.0.1:6379> HGET myhash field1
"foo"
3.List 列表
LPUSH key value1 [value2] & RPUSH key value1 [value2]
將一個或多個值插入到列表頭部
127.0.0.1:6379> LPUSH nameList xiaoming xiaohong
(integer) 2
LPUSHX key value1.. valueN & RPUSHX key value1 [value2]
將一個值插入到已存在的列表頭部,列表不存在時操作無效。
127.0.0.1:6379> LPUSHX nameList222 xiaofei
(integer) 0
LPOP key && RPOP key
移出并獲取列表的第一個元素/移除并獲取列表最后一個元素
127.0.0.1:6379> LPUSH mylist a b c d e
(integer) 5
127.0.0.1:6379> LPOP mylist
"e"
127.0.0.1:6379> RPOP mylist
"a"
127.0.0.1:6379> LPOP mylist
"d"
RPOPLPUSH sourceList destinationList
用于移除列表的最后一個元素,并將該元素添加到另一個列表并返回。
BLPOP/BRPOP key1 [key2 ] timeout
移出并獲取列表的第一個/最后一個元素, 如果列表沒有元素會阻塞列表直到等待超時或發現可彈出元素為止。
LINDEX key index
用于通過索引獲取列表中的元素。你也可以使用負數下標,以 -1 表示列表的最后一個元素, -2 表示列表的倒數第二個元素
127.0.0.1:6379> LINDEX mylist 1
"b"
LINSERT key BEFORE|AFTER pivot value
用于在列表的元素前或者后插入元素。當指定元素不存在于列表中時,不執行任何操作。
127.0.0.1:6379> LPUSH mylist a b c d e f g
(integer) 7
127.0.0.1:6379> LINSERT mylist BEFORE "b" "666"
(integer) 8
127.0.0.1:6379> LRANGE mylist 0 -1
1) "g"
2) "f"
3) "e"
4) "d"
5) "c"
6) "666"
7) "b"
8) "a"
4.Set 集合
Set 是 String 類型的無序集合。集合成員是唯一的,這就意味著集合中不能出現重復的數據。
Redis 中集合是通過哈希表實現的,所以添加,刪除,查找的復雜度都是 O(1)。
-
SADD key value1..valueN
將一個或多個成員元素加入到集合中,已經存在于集合的成員元素將被忽略。
127.0.0.1:6379> SADD myset "hello"
(integer) 1
-
SCARD key
返回集合中元素的數量。
127.0.0.1:6379> SADD myset "world"
(integer) 1
127.0.0.1:6379> SCARD myset
(integer) 2
-
SDIFF firstKey otherKey1..otherKeyN
返回給定集合之間的差集。不存在的集合 key 將視為空集。差集的結果來自前面的 FIRST_KEY ,而不是后面的 OTHER_KEY1,也不是整個 FIRST_KEY OTHER_KEY1..OTHER_KEYN 的差集。
key1 = {a,b,c,d}
key2 = {c}
key3 = {a,c,e}
SDIFF key1 key2 key3 = {b,d}
-
SDIFFSTORE destination key1..keyN
將給定集合之間的差集存儲在指定的集合中。如果指定的集合 key 已存在,則會被覆蓋。
myset = {"hello", "foo", "bar"}
myset2 = {"hello", "world"}
127.0.0.1:6379> SDIFFSTORE destset myset myset2
(integer) 2
127.0.0.1:6379> SMEMBERS destset
1) "foo"
2) "bar"
5.SINTER KEY KEY1..KEYN
返回給定所有給定集合的交集。 不存在的集合 key 被視為空集。 當給定集合當中有一個空集時,結果也為空集。
key1 = {a,b,c}
key2 = {a,c}
SINTER key1 key2 = {a, c}
-
SINTERSTORE destination key key1..keyN
將給定集合之間的交集存儲在指定的集合中。如果指定的集合已經存在,則將其覆蓋。
127.0.0.1:6379> SINTERSTORE myset myset1 myset2
(integer) 1
127.0.0.1:6379> SMEMBERS myset
1) "hello"
-
SISMEMBER key value
判斷成員元素是否是集合的成員。
127.0.0.1:6379> SADD myset1 "hello"
(integer) 1
127.0.0.1:6379> SISMEMBER myset1 "hello"
(integer) 1
127.0.0.1:6379> SISMEMBER myset1 "world"
(integer) 0
-
SMEMBERS key
返回集合中的所有的成員。 不存在的集合 key 被視為空集合。
127.0.0.1:6379> SADD myset1 "hello"
(integer) 1
127.0.0.1:6379> SADD myset1 "world"
(integer) 1
127.0.0.1:6379> SMEMBERS myset1
1) "World"
2) "Hello"
-
SMOVE source destination member
將指定成員 member 元素從 source 集合移動到 destination 集合。
SMOVE 是原子性操作。
如果 source 集合不存在或不包含指定的 member 元素,則 SMOVE 命令不執行任何操作,僅返回 0 。否則, member 元素從 source 集合中被移除,并添加到 destination 集合中去。
當 destination 集合已經包含 member 元素時, SMOVE 命令只是簡單地將 source 集合中的 member 元素刪除。
myset1 = {"hello", "world", "bar"}
myset2 = {"foo"}
127.0.0.1:6379> SMOVE myset1 myset2 "bar"
(integer) 1
127.0.0.1:6379> SMEMBERS myset1
1) "World"
2) "Hello"
127.0.0.1:6379> SMEMBERS myset2
1) "foo"
2) "bar"
-
SPOP key
移除并返回集合中的一個隨機元素 -
SRANDMEMBER KEY [count]
如果 count 為正數,且小于集合基數,那么命令返回一個包含 count 個元素的數組,數組中的元素各不相同。如果 count 大于等于集合基數,那么返回整個集合。
如果 count 為負數,那么命令返回一個數組,數組中的元素可能會重復出現多次,而數組的長度為 count 的絕對值。
該操作和 SPOP 相似,但 SPOP 將隨機元素從集合中移除并返回,而 Srandmember 則僅僅返回隨機元素,而不對集合進行任何改動。
myset = {a b c d e f}
127.0.0.1:6379> SRANDMEMBER myset 3
1) "b"
2) "e"
3) "a"
127.0.0.1:6379> SRANDMEMBER myset 3
1) "c"
2) "b"
3) "e"
127.0.0.1:6379> SRANDMEMBER myset 10
1) "a"
2) "b"
3) "d"
4) "c"
5) "e"
6) "f"
127.0.0.1:6379> SRANDMEMBER myset -4
1) "c"
2) "c"
3) "d"
4) "a"
SREM key member1..memberN
用于移除集合中的一個或多個成員元素,不存在的成員元素會被忽略。SUNION key key1..keyN
返回給定集合的并集。不存在的集合 key 被視為空集。SUNIONSTORE destination key key1..keyN
將給定集合的并集存儲在指定的集合 destination 中。如果 destination 已經存在,則將其覆蓋。SSCAN key cursor [MATCH pattern] [COUNT count]
用于迭代集合中鍵的元素。
127.0.0.1:6379> SADD myset1 hello
(integer) 1
127.0.0.1:6379> SADD myset1 hi
(integer) 1
127.0.0.1:6379> SADD myset1 bar
(integer) 1
127.0.0.1:6379> SSCAN myset1 0 match h*
1) "0"
2) 1) "hello"
2) "hi"
127.0.0.1:6379> SSCAN myset1 0
1) "0"
2) 1) "hello"
2) "bar"
3) "hi"
5.Sorted Set 有序集合
1.ZADD key score1 value1.. scoren valueN
將一個或多個成員元素及其分數值加入到有序集當中。
如果某個成員已經是有序集的成員,那么更新這個成員的分數值,并通過重新插入這個成員元素,來保證該成員在正確的位置上。
分數值可以是整數值或雙精度浮點數。
如果有序集合 key 不存在,則創建一個空的有序集并執行 ZADD 操作。
127.0.0.1:6379> ZADD myzset 2 "two" 3 "three"
(integer) 2
127.0.0.1:6379> ZADD myzset 1 "one"
(integer) 1
127.0.0.1:6379> ZRANGE myzset 0 -1 WITHSCORES
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
2.ZCARD key
計算集合中元素的數量。
redis> ZADD myzset 1 "one"
(integer) 1
redis> ZADD myzset 2 "two"
(integer) 1
redis> ZCARD myzset
(integer) 2
3.ZCOUNT key min max
計算有序集合中指定分數區間的成員數量。
redis 127.0.0.1:6379> ZADD myzset 1 "hello"
(integer) 1
redis 127.0.0.1:6379> ZADD myzset 1 "foo"
(integer) 1
redis 127.0.0.1:6379> ZADD myzset 2 "world" 3 "bar"
(integer) 2
redis 127.0.0.1:6379> ZCOUNT myzset 1 3
(integer) 4
-
ZINCRBY key increment member
對有序集合中指定成員的分數加上增量 increment
可以通過傳遞一個負數值 increment ,讓分數減去相應的值,比如 ZINCRBY key -5 member ,就是讓 member 的 score 值減去 5 。
當 key 不存在,或member不是 key 的成員時, ZINCRBY key increment member 等同于 ZADD key increment member 。
redis> ZADD myzset 1 "one"
(integer) 1
redis> ZADD myzset 2 "two"
(integer) 1
redis> ZINCRBY myzset 2 "one"
"3"
redis> ZRANGE myzset 0 -1 WITHSCORES
1) "two"
2) "2"
3) "one"
4) "3"
-
ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
計算給定的一個或多個有序集的交集,其中給定 key 的數量必須以 numkeys 參數指定,并將該交集(結果集)儲存到 destination 。
默認情況下,結果集中某個成員的分數值是所有給定集下該成員分數值之和。
# 有序集 mid_test
redis 127.0.0.1:6379> ZADD mid_test 70 "Li Lei"
(integer) 1
redis 127.0.0.1:6379> ZADD mid_test 70 "Han Meimei"
(integer) 1
redis 127.0.0.1:6379> ZADD mid_test 99.5 "Tom"
(integer) 1
# 另一個有序集 fin_test
redis 127.0.0.1:6379> ZADD fin_test 88 "Li Lei"
(integer) 1
redis 127.0.0.1:6379> ZADD fin_test 75 "Han Meimei"
(integer) 1
redis 127.0.0.1:6379> ZADD fin_test 99.5 "Tom"
(integer) 1
# 交集
redis 127.0.0.1:6379> ZINTERSTORE sum_point 2 mid_test fin_test
(integer) 3
# 顯示有序集內所有成員及其分數值
redis 127.0.0.1:6379> ZRANGE sum_point 0 -1 WITHSCORES
1) "Han Meimei"
2) "145"
3) "Li Lei"
4) "158"
5) "Tom"
6) "199"
如果需要計算平均值則計算SUM后除以numkeys。
-
ZLEXCOUNT key min max
計算有序集合中指定字典區間內成員數量。即[a (b 之類的
redis 127.0.0.1:6379> ZADD myzset 0 a 0 b 0 c 0 d 0 e
(integer) 5
redis 127.0.0.1:6379> ZADD myzset 0 f 0 g
(integer) 2
redis 127.0.0.1:6379> ZLEXCOUNT myzset - +
(integer) 7
redis 127.0.0.1:6379> ZLEXCOUNT myzset [b [f
(integer) 5
-
ZRANGE / ZREVRANGE key start stop [WITHSCORES]
返回有序集中,指定區間內的成員。
其中成員的位置按分數值遞增(從小到大/從大到小)來排序
redis 127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES # 遞增排列
1) "peter"
2) "3500"
3) "tom"
4) "4000"
5) "jack"
6) "5000"
redis 127.0.0.1:6379> ZREVRANGE salary 0 -1 WITHSCORES # 遞減排列
1) "jack"
2) "5000"
3) "tom"
4) "4000"
5) "peter"
6) "3500"
-
ZRANGEBYLEX key min max [LIMIT offset count]
通過字典區間返回有序集合的成員。
redis 127.0.0.1:6379> ZADD myzset 0 a 0 b 0 c 0 d 0 e 0 f 0 g
(integer) 7
redis 127.0.0.1:6379> ZRANGEBYLEX myzset - [c
1) "a"
2) "b"
3) "c"
redis 127.0.0.1:6379> ZRANGEBYLEX myzset - (c
1) "a"
2) "b"
redis 127.0.0.1:6379> ZRANGEBYLEX myzset [aaa (g
1) "b"
2) "c"
3) "d"
4) "e"
5) "f"
-
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
指定區間內,帶有分數值(可選)的有序集成員的列表。
ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]
返回有序集中指定分數區間內的所有的成員。有序集成員按分數值遞減(從大到小)的次序排列。
redis 127.0.0.1:6379> ZADD salary 2500 jack # 測試數據
(integer) 0
redis 127.0.0.1:6379> ZADD salary 5000 tom
(integer) 0
redis 127.0.0.1:6379> ZADD salary 12000 peter
(integer) 0
redis 127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf # 顯示整個有序集
1) "jack"
2) "tom"
3) "peter"
redis 127.0.0.1:6379> ZRANGEBYSCORE salary -inf +inf WITHSCORES # 顯示整個有序集及成員的 score 值
1) "jack"
2) "2500"
3) "tom"
4) "5000"
5) "peter"
6) "12000"
redis 127.0.0.1:6379> ZRANGEBYSCORE salary -inf 5000 WITHSCORES # 顯示工資 <=5000 的所有成員
1) "jack"
2) "2500"
3) "tom"
4) "5000"
redis 127.0.0.1:6379> ZRANGEBYSCORE salary (5000 400000 # 顯示工資大于 5000 小于等于 400000 的成員
1) "peter"
-
ZRANK key member
返回有序集中指定成員的排名。其中有序集成員按分數值遞增(從小到大)順序排列。
ZREVRANK key member
返回有序集中成員的排名。其中有序集成員按分數值遞減(從大到小)排序。
redis 127.0.0.1:6379> ZRANGE salary 0 -1 WITHSCORES # 顯示所有成員及其 score 值
1) "peter"
2) "3500"
3) "tom"
4) "4000"
5) "jack"
6) "5000"
redis 127.0.0.1:6379> ZRANK salary tom # 顯示 tom 的薪水排名,第二
(integer) 1
ZREM key member [member ...]
用于移除有序集中的一個或多個成員,不存在的成員將被忽略。
ZREMRANGEBYLEX key min max
移除有序集合中給定的字典區間的所有成員。ZSCORE key member
返回有序集中,成員的分數值。 如果成員元素不是有序集 key 的成員,或 key 不存在,返回 nil 。ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
計算給定的一個或多個有序集的并集,其中給定 key 的數量必須以 numkeys 參數指定,并將該并集(結果集)儲存到 destination 。ZSCAN key cursor [MATCH pattern] [COUNT count]
迭代有序集合中的元素(包括元素成員和元素分值)