Redis中所有數(shù)據(jù)都是以key-value存儲的同衣,value支持的數(shù)據(jù)類型包括string抬闷、hash、list少辣、set凌摄、zset(sorted_set)
每種數(shù)據(jù)類型內(nèi)部使用了不同的編碼,并且Redis會根據(jù)存儲的值自動選擇合適的編碼漓帅,這對使用者是透明的锨亏,object encoding key
這個命令可以查看編碼。了解各種數(shù)據(jù)類型的內(nèi)部編碼可以幫助理解各數(shù)據(jù)類型相關命令的時間復雜度忙干,從而在使用過程中避免執(zhí)行耗時命令引起阻塞器予。
1.string
string 是redis最基本的類型,一個key對應一個value捐迫。
1.1 常用命令
命令 | 用途 |
---|---|
set key value | 設置一個key的value(string類型) |
get key | 獲取一個key的value(string類型) |
append key value | 向一個string類型的key追加一個value |
strlen key | 獲取key中存儲的value的長度 |
del key [key ...] | 刪除key |
incr key | key的integer類型的value+1 |
decr | key的integer類型的value-1 |
incrby key increment | key的integer類型的vaule+increment |
decrby key decrement | key的integer類型的vaule-decrement |
getrange key start end | 截取字符串 |
setrange key offset value | 從指定的位置覆蓋字符串 |
setex key seconds value | 保存含有效期的key-value |
setnx key value | 設置key-value(僅當key不存在時) |
mset key value [key value ...] | 設置多個key-value |
mget key [key ...] | 查詢多個key |
msetnx key value [key value ...] | 保存多個key-value(所有key均不存在才保存) |
1.2 示例
分別通過set乾翔、mset保存key-value(k1-k10)及get、mget獲取key
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> set k3 v3
OK
127.0.0.1:6379> set k4 4
OK
127.0.0.1:6379> set k5 5
OK
127.0.0.1:6379> set k6 6
OK
127.0.0.1:6379> set k7 abcde
OK
127.0.0.1:6379> set k8 edcba
OK
127.0.0.1:6379> mset k9 v9 k10 v10
OK
127.0.0.1:6379> keys *
1) "k6"
2) "k8"
3) "k5"
4) "k3"
5) "k1"
6) "k2"
7) "k9"
8) "k7"
9) "k10"
10) "k4"
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> mget k2 k3 k4 k5 k6 k7 k8 k9 k10
1) "v2"
2) "v3"
3) "4"
4) "5"
5) "6"
6) "abcde"
7) "edcba"
8) "v9"
9) "v10"
127.0.0.1:6379>
使用append追加一個value到key
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> append k1 v1v1
(integer) 6
127.0.0.1:6379> get k1
"v1v1v1"
127.0.0.1:6379>
使用strlen獲取key中value的長度
127.0.0.1:6379> strlen k1
(integer) 6
刪除key
127.0.0.1:6379> mget k2 k3
1) "v2"
2) "v3"
127.0.0.1:6379> del k2 k3
(integer) 2
127.0.0.1:6379> keys *
1) "k6"
2) "k8"
3) "k5"
4) "k1"
5) "k9"
6) "k7"
7) "k10"
8) "k4"
127.0.0.1:6379>
incr使value+1
127.0.0.1:6379> incr k6
(integer) 7
decr使value-1
127.0.0.1:6379> decr k4
(integer) 3
incrby使value+給定值
127.0.0.1:6379> incrby k5 5
(integer) 10
decrby使value-給定值
127.0.0.1:6379> decrby k5 9
(integer) 1
getrange截取字符串
127.0.0.1:6379> get k7
"abcde"
127.0.0.1:6379> getrange k7 0 3
"abcd"
setrange從指定的位置覆蓋字符串
127.0.0.1:6379> get k7
"abcde"
127.0.0.1:6379> setrange k7 2 xyzopq
(integer) 8
127.0.0.1:6379> get k7
"abxyzopq"
setex設置含有效期的key-value
127.0.0.1:6379> setex k11 20 value
OK
127.0.0.1:6379> ttl k11
(integer) 17
127.0.0.1:6379> ttl k11
(integer) 14
127.0.0.1:6379> ttl k11
(integer) 10
127.0.0.1:6379> ttl k11
(integer) 5
127.0.0.1:6379> ttl k11
(integer) 1
127.0.0.1:6379> ttl k11
(integer) -2
127.0.0.1:6379> get k11
(nil)
127.0.0.1:6379>
setnx保存key-value(若key已存在施戴,不保存)
127.0.0.1:6379> get k1
"v1v1v1"
127.0.0.1:6379> get k2
(nil)
127.0.0.1:6379> setnx k1 xyz
(integer) 0
127.0.0.1:6379> setnx k2 abc
(integer) 1
127.0.0.1:6379> get k2
"abc"
127.0.0.1:6379>
msetnx保存多個key-value(所有key均不存在才保存)
127.0.0.1:6379> msetnx k11 v11 k12 v12 k10 v10
(integer) 0
127.0.0.1:6379> msetnx k11 v11 k12 v12
(integer) 1
127.0.0.1:6379> mget k11 k12
1) "v11"
2) "v12"
127.0.0.1:6379>
1.3 幫助信息
help @string命令查看string
類型的所有用法反浓。幫助信息里面都是非常通俗的英文描述,不難看懂赞哗,其它數(shù)據(jù)類型不再照抄redis的幫助信息了雷则,建議直接看自帶的幫助,這是最權威的肪笋,英文直接能看懂的話月劈,效果肯定比看其它資料好。
127.0.0.1:6379> help @string
APPEND key value
summary: Append a value to a key
since: 2.0.0
...省略1000字...
GET key
summary: Get the value of a key
since: 1.0.0
...省略10,000字...
SETEX key seconds value
summary: Set the value and expiration of a key
since: 2.0.0
SETNX key value
summary: Set the value of a key, only if the key does not exist
since: 1.0.0
SETRANGE key offset value
summary: Overwrite part of a string at key starting at the specified offset
since: 2.2.0
STRLEN key
summary: Get the length of the value stored in a key
since: 2.2.0
127.0.0.1:6379>
1.4 應用場景
緩存涂乌、限速艺栈、分布式session、計數(shù)器
2.hash
hash 是一個string類型的field和value的映射表湾盒,hash特別適合用于存儲對象湿右。
2.1 常用命令
命令 | 用途 |
---|---|
hset key field value | 保存一個field到hash |
hget key field | 獲取hash的一個field值 |
hmset key field value [field value ...] | 保存多個field到hash |
hmget key field [field ...] | 獲取hash的多個field值 |
hgetall key | 獲取hash的所有field(name & value) |
hdel key field [field ...] | 刪除hash的field |
hlen key | 獲取hash中field的數(shù)量 |
hexists key field | 判斷hash中是否存在給定的field |
hkeys key | 獲取給定hash中的所有field(僅name) |
hvals key | 獲取給定hash中所有field的值(僅value) |
hincrby key field increment | hash中指定的field+increment(integer) |
hincrbyfloat key field increment | hash中指定的field+increment(float) |
2.2 示例
hset保存一個field到hash
127.0.0.1:6379> hset h f1 v1
(integer) 1
hget獲取hash的指定field
127.0.0.1:6379> hget h f1
"v1"
hmset保存多個field到hash
127.0.0.1:6379> hmset h f2 2 f3 3 f4 4
OK
hmget獲取hash的多個field
127.0.0.1:6379> hmget h f1 f2 f3 f4 f5
1) "v1"
2) "2"
3) "3"
4) "4"
5) (nil)
hgetall獲取hash的所有filed(包括name和value)
127.0.0.1:6379> hgetall h
1) "f1"
2) "v1"
3) "f2"
4) "2"
5) "f3"
6) "3"
7) "f4"
8) "4"
hdel刪除hash的指定field
127.0.0.1:6379> hdel h f1
(integer) 1
hlen獲取hash中field數(shù)量
127.0.0.1:6379> hlen h
(integer) 3
hexists判斷hash中是否存在指定的field
127.0.0.1:6379> hexists h f1
(integer) 0
127.0.0.1:6379> hexists h f2
(integer) 1
hkeys獲取hash中的所有field(僅name)
127.0.0.1:6379> hkeys h
- "f2"
- "f3"
- "f4"
hvals獲取hash中所有field的value
127.0.0.1:6379> hvals h
1) "2"
2) "3"
3) "4"
hincrby使hash中指定的field+給定的值(integer)
127.0.0.1:6379> hincrby h f2 5
(integer) 7
hincrbyfloat使hash中指定的field+給定的值(float)
127.0.0.1:6379> hincrbyfloat h f2 5.5
"12.5"
2.3 應用場景
緩存、限速罚勾、session共享
3.list
list 是簡單的字符串列表毅人,按照插入順序排序吭狡。
3.1 常用命令
命令 | 用途 |
---|---|
lpush key value [value ...] | 保存一個或多個value到list(向前追加) |
rpush key value [value ...] | 保存一個或多個value到list(向后追加) |
lrange key start stop | 從list中獲取一個范圍的元素 |
lpop key | 移除list中的第一個元素 |
rpop key | 一處list中的最后一個元素 |
lindex key index | 通過索引獲取list中的元素 |
llen key | 獲取list的長度 |
lrem key count value | 從list中移除count個value |
ltrim key start stop | 按指定的范圍截取list |
rpoplpush key key | 從list中移除最后一個元素,并將該元素lpush到另一個list |
lset key index | 通過索引設置list中的元素 |
3.2 示例
lpush丈莺、rpush划煮、lrange
127.0.0.1:6379> lpush l a b c
(integer) 3
127.0.0.1:6379> lrange l 0 -1
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> rpush l x y z
(integer) 6
127.0.0.1:6379> lrange l 0 -1
1) "c"
2) "b"
3) "a"
4) "x"
5) "y"
6) "z"
127.0.0.1:6379>
lpop
127.0.0.1:6379> lpop l
"c"
127.0.0.1:6379> lrange l 0 -1
1) "b"
2) "a"
3) "x"
4) "y"
5) "z"
127.0.0.1:6379>
rpop
127.0.0.1:6379> rpop l
"z"
127.0.0.1:6379> lrange l 0 -1
1) "b"
2) "a"
3) "x"
4) "y"
127.0.0.1:6379>
lindex通過索引獲取list中的元素
127.0.0.1:6379> lindex l 0
"b"
127.0.0.1:6379>
llen獲取list長度
127.0.0.1:6379> llen l
(integer) 4
127.0.0.1:6379>
lrem從list中移除count個指定的value
127.0.0.1:6379> lrange l2 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "1"
7) "2"
8) "3"
9) "4"
10) "5"
11) "1"
12) "2"
13) "3"
14) "4"
15) "5"
127.0.0.1:6379> lrem l2 2 5
(integer) 2
127.0.0.1:6379> lrange l2 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "1"
6) "2"
7) "3"
8) "4"
9) "1"
10) "2"
11) "3"
12) "4"
13) "5"
127.0.0.1:6379>
ltrim按指定的范圍截取list
127.0.0.1:6379> ltrim l2 0 3
OK
127.0.0.1:6379> lrange l2 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379>
rpoplpush從list移除最后一個元素,并將該元素添加到另一個list的左邊
127.0.0.1:6379> rpoplpush l l2
"y"
127.0.0.1:6379> lrange l2 0 -1
1) "y"
2) "1"
3) "2"
4) "3"
5) "4"
127.0.0.1:6379>
lset通過索引設置list的元素
127.0.0.1:6379> lset l2 0 0
OK
127.0.0.1:6379> lrange l2 0 -1
1) "0"
2) "1"
3) "2"
4) "3"
5) "4"
127.0.0.1:6379>
3.3 應用場景
消息隊列(lpush+brpop)
4.set
set 是string類型的無序集合缔俄。
4.1 常用命令
命令 | 用途 |
---|---|
sadd key member [member ...] | 添加1個或多個member到set中 |
smembers key | 獲取set中的所有member |
sismember key member | 判斷給定的值是否時set中的member |
scard key | 獲取set中member的數(shù)量 |
srem key member [member ...] | 從set中移除member |
srandmember key [count] | 從set中隨機獲取member |
smove key key member | 從set移動一個member到另一個set |
sdiff key [key ...] | 比較多個set的差異 |
sinter key [key ...] | 獲取set的交集 |
sunion key [key ...] | 獲取set的并集 |
4.2 示例
sadd 添加1個或多個member到set中
127.0.0.1:6379> sadd s1 a b c d e f
(integer) 6
smembers 獲取set中的所有member
127.0.0.1:6379> smembers s1
1) "c"
2) "a"
3) "b"
4) "f"
5) "d"
6) "e"
sismember 判斷給定的值是否時set中的member
127.0.0.1:6379> sismember s1 a
(integer) 1
127.0.0.1:6379> sismember s1 x
(integer) 0
scard 獲取set中member的數(shù)量
127.0.0.1:6379> scard s1
(integer) 6
srem 從set中移除member
127.0.0.1:6379> srem s1 e f
(integer) 2
127.0.0.1:6379> smembers s1
1) "a"
2) "c"
3) "d"
4) "b"
srandmember 從set中隨機獲取member
127.0.0.1:6379> srandmember s1 2
1) "a"
2) "b"
127.0.0.1:6379> srandmember s1 2
1) "c"
2) "a"
127.0.0.1:6379> srandmember s1 2
1) "c"
2) "b"
smove 從set移動一個member到另一個set
127.0.0.1:6379> sadd s2 1 2 3
(integer) 3
127.0.0.1:6379> smove s1 s2 d
(integer) 1
127.0.0.1:6379> smembers s2
1) "d"
2) "3"
3) "1"
4) "2"
sdiff 比較多個set的差異
127.0.0.1:6379> sadd s3 1 2
(integer) 2
127.0.0.1:6379> sdiff s2 s3
1) "3"
2) "d"
sinter 獲取set的交集
127.0.0.1:6379> sinter s2 s3
1) "1"
2) "2"
sunion 獲取set的并集
127.0.0.1:6379> sunion s1 s2
1) "b"
2) "3"
3) "a"
4) "c"
5) "d"
6) "1"
7) "2"
4.3 應用場景
標簽弛秋、隨機數(shù)(spot、srandmember)
5 zset(sorted_set)
zset 和 set 一樣也是string類型元素的集合,且不允許重復的成員俐载。不同的是每個元素都會關聯(lián)一個double類型的分數(shù)蟹略。redis正是通過分數(shù)來為集合中的成員進行從小到大的排序。zset的成員是唯一的,但分數(shù)(score)卻可以重復遏佣。
5.1 常用命令
命令 | 用途 |
---|---|
zadd key socre member [socre member ...] | 添加member到sorted set挖炬,如果member已存在則更新它的socre |
zrange key start stop [withscores] | 從sorted set獲取指定索引范圍的member,按從小到大的順序 |
zrevrange key start stop [withscores] | 從sorted set獲取指定索引范圍的member状婶,按從大到小的順序 |
zrangebyscore key min max [withscores] [limit offset count] | 從sorted set獲取指定score范圍的member |
zcount key min max | 獲取指定score范圍內(nèi)的member數(shù)量 |
zrank key member | 確定member在sorted set中的索引(從小到大) |
zrevrank key member | 確定member在sorted set中的索引(從大到幸饬病) |
zscore key member | 從sorted set中獲取給定member的score |
5.2 示例
zadd 添加member到sorted set,如果member已存在則更新它的socre
127.0.0.1:6379> zadd z1 10 aa 20 bb 30 cc 40 dd 50 ee 60 ff
(integer) 6
127.0.0.1:6379> zadd z1 70 gg 15 bb
(integer) 1
127.0.0.1:6379>
zrange 從sorted set獲取指定索引范圍的member膛虫,按從小到大的順序
127.0.0.1:6379> zrange z1 0 2
1) "aa"
2) "bb"
3) "cc"
127.0.0.1:6379>
zrevrange 從sorted set獲取指定索引范圍的member草姻,按從大到小的順序
127.0.0.1:6379> zrevrange z1 0 2
1) "gg"
2) "ff"
3) "ee"
127.0.0.1:6379>
zrangebyscore 從sorted set獲取指定score范圍的member
如果不包含給定的score,需要使用(
127.0.0.1:6379> zrangebyscore z1 10 30
1) "aa"
2) "bb"
3) "cc"
127.0.0.1:6379> zrangebyscore z1 10 (30
1) "aa"
2) "bb"
127.0.0.1:6379> zrangebyscore z1 (10 30
1) "bb"
2) "cc"
127.0.0.1:6379> zrangebyscore z1 (10 (30
1) "bb"
127.0.0.1:6379>
zcount 獲取指定score范圍內(nèi)的member數(shù)量
如果不包含給定的score走敌,需要使用(
127.0.0.1:6379> zcount z1 10 30
(integer) 3
127.0.0.1:6379> zcount z1 10 (30
(integer) 2
127.0.0.1:6379> zcount z1 (10 30
(integer) 2
127.0.0.1:6379> zcount z1 (10 (30
(integer) 1
127.0.0.1:6379>
zrank 確定member在sorted set中的索引(從小到大)
127.0.0.1:6379> zrank z1 cc
(integer) 2
127.0.0.1:6379>
zrevrank 確定member在sorted set中的索引(從大到胁昵恪)
127.0.0.1:6379> zrevrank z1 cc
(integer) 4
127.0.0.1:6379>
zscore 從sorted set中獲取給定member的score
127.0.0.1:6379> zscore z1 bb
"15"
127.0.0.1:6379>
5.3 應用場景
排行榜
6.其它數(shù)據(jù)類型
Bitmaps
HyperLogLog
GEO