Redis五种基本数据类型总结
啥也不说,就是努力。
- redis的数据类型
- 数据类型存储原理
深入浅出Redis-redis底层数据结构(上)
深入浅出Redis-redis底层数据结构(下)
1 redis的五种数据类型
五种数据类型 |
形式(key:value) 只是value是下面类型 |
string:字符串类型 |
key:string; value:string |
hash: 散列类型 |
key:string; value:hash |
list: 列表类型 |
key:string; value:数组 |
set: 集合类型 |
key:string; value: set |
zset:有序集合类型 |
key:string; value:sorted set |
1 string
字符串中不仅仅可以存储字符串,它可以存储以下 3 中类型的值 :
1 基本操作
操作 |
说明 |
举例 |
SET key value |
设置指定 key 的值 |
set aaa bbb => {aaa: bbb} |
GET key |
获取指定 key 的值 |
get add => bbb |
GETRANGE key start end |
返回 key 中字符串值的子字符 |
getrange aaa 0 1 => bb |
GETSET key value |
将给定 key 的值设为 value ,并返回 key 的旧值(old value) |
getset aaa ccc => bbb |
MGET key1 [key2..] |
获取所有(一个或多个)给定 key 的值 |
mget aaa bbb => (0)ccc, (1)aaa |
SETNX key value |
只有在 key 不存在时设置 key 的值 |
SETNX aaa bbb => 0 (aaa已存在) |
MSET key value [key value …] |
同时设置一个或多个 key-value 对 |
MSET aaa bbb ccc ddd => {aaa:bbb, ccc:ddd} |
SETEX key seconds value |
将值 value 关联到 key ,并将 key 的过期时间设为 seconds (以秒为单位) |
|
PSETEX key milliseconds value |
以毫秒为单位设置 key 的生存时间 |
|
2 对整数、浮点数进行增减操作;对字符串进行截取等相关操作
自增自减命令
127.0.0.1:6379> get key
(nil)
127.0.0.1:6379> incr key
(integer) 1
127.0.0.1:6379> incrby key 15
(integer) 16
127.0.0.1:6379> decr key
(integer) 15
127.0.0.1:6379> get key
"15"
127.0.0.1:6379> set key 13
OK
127.0.0.1:6379> incr key
(integer) 14
2 处理子串和二进制位的命令
127.0.0.1:6379> append new-string-key "hello "
(integer) 6
127.0.0.1:6379> append new-string-key "world!"
(integer) 12
127.0.0.1:6379> get new-string-key
"hello world!"
127.0.0.1:6379> getrange new-string-key 3 7
"lo wo"
127.0.0.1:6379> setrange new-string-key 0 H
(integer) 12
127.0.0.1:6379> get new-string-key
"Hello world!"
127.0.0.1:6379> setrange new-string-key 6 W
(integer) 12
127.0.0.1:6379> get new-string-key
"Hello World!"
# setrange 即可替换字符串,又可增长字符串
127.0.0.1:6379> setrange new-string-key 11 ", how are you?"
(integer) 25
127.0.0.1:6379> get new-string-key
"Hello World, how are you?"
127.0.0.1:6379>
# 001
127.0.0.1:6379> setbit another-key 2 1
(integer) 0
# 0010 0001 = 10 进制数 33,对应的 ASCII 为 !
127.0.0.1:6379> setbit another-key 7 1
(integer) 0
127.0.0.1:6379> get another-key
"!"
2 列表 list
1 常用命令列表
操作 |
说明 |
举例 |
RPUSH key value1 [value2] |
在列表中添加一个或多个值 |
RPUSH aaa “bar” “foo” (后面value必须加引号) =》 {aaa: [bar, foo]} |
LPUSH key value1 [value2] |
将一个值或者多个值推入列表的左端 |
LPUSH aaa “hel” “lo” => {aaa: [lo, hel, bar, foo]} 注意:lo是最左 |
RPOP key |
移除并返回列表最右端元素 |
RPOP aaa => foo |
LPOP key |
移除并返回列表最左端元素 |
LPOP aaa => lo |
LRANGE key start end |
返回[start,end]之间的元素 |
LRANGE aaa 0 -1 => [hel, bar] |
LINDEX key offset |
返回列表中偏移量为offset的元素 |
LINDEX aaa 0 => hel |
LTRIM key start end |
只保留[start,end]之间的元素 |
LTRIM aaa 0 0 => {aaa: [hel]} |
2 阻塞式命令
操作 |
说明 |
举例 |
BLPOP key [key …] timeout |
从第一个非空列表弹出最左端元素或者阻塞等待timeout时间等待可弹出元素出现 |
BLPOP “qqq” “www” 15 => [“lo”, “hel”] |
BRPOP key [key …] timeout |
同上 |
|
BPOPLPUSH source_key dest_key |
从source_key列表弹出,然后插入到dest_key |
|
BRPOPLPUSH source_key dest_key timeout |
没有元素,阻塞等待timeout |
|
3 集合(set)
1 常用命令列表
操作 |
说明 |
举例 |
SADD key member1 [member2] |
向集合添加一个或多个成员 |
sadd set 1 2 => {set: [1,2]} |
SREM key item [item …] |
移除集合中的一个或者多个元素,并返回移除数目 |
|
SPOP key |
移除集合的一个元素,并返回 |
SPOP set => 2 |
SISMEMBER key item |
检查item是否在集合中 |
sismember set 2 |
SCARD key |
返回集合的元素数目 |
scard set => 1 |
SMEMBERS key |
返回集合所有元素 |
smembers set => [1] |
SRANDMEMBER key [count] |
随机返回一个或者多个元素,count为负时返回元素可能重复,正不会 |
srandmember set 1 => 1 |
SMOVE source_key dest_key item |
如果包含item,移除并添加到dest_key |
|
2 用于组合和处理多个集合的redis命令
操作 |
说明 |
举例 |
SDIFF key [key …] |
差集: 返回存在第一个集合,而其他集合不存在的运算 |
sdiff key1 key2 |
SDIFFSTORE dest_key key [key …] |
将差集存到dest_key中 |
sdiff dest_key key1 key2 |
SINTER key [key …] |
交集: 所有集合都包含的元素 |
|
SINTERSTORE dest_key key [key …] |
将交集存到dest_key中 |
|
SUNION key [key …] |
并集: 所有元素 |
|
SUNIONSTORE dest_key key [key …] |
将并集存到dest_key中 |
|
4 哈希(hash)
1 常用命令列表
key_name是指redis键值对的key, key是hash value对应的key
操作 |
说明 |
举例 |
HGET key field |
获取存储在哈希表中指定字段的值 |
hget hash “111” => “111” |
HMGET key_name key [key…] |
获取存储在哈希表中多个值 |
|
HSET key_name key value |
将哈希表 key 中的字段 field 的值设为 value |
|
HMSET key_name key value [key value …] |
设置多个键值对 |
HMSET hash “111” “111” “222” “222” |
HDEL key_name key [key…] |
删除一个或者多个键值对,返回删除数目 |
|
HLEN key_name |
返回键值对数目 |
|
2 reids高级特性
操作 |
说明 |
举例 |
HEXISTS key_name key |
查看指定key是否存在 |
|
HGETALL key_name |
获取在哈希表中指定 key 的所有字段和值 |
|
HKEYS key_name |
获取散列包含的所有键 |
|
HVALS key_name |
获取散列包含的所有值 |
|
HINCRBY key_name key increment |
将键key保存的值加上increment |
|
HINCRBYFLOAT key_name key increment |
将键key保存的值加上浮点数increment |
|
5 有序集合(zset)
1 常用命令列表
操作 |
说明 |
举例 |
ZADD key score member [score member…] |
将带有给定分数的成员加入到有序集合中 |
zadd zset_key 1 “aaa” 2 “bbb” 3 “ccc” |
ZREM key member [member…] |
从有序集合中移除成员,并返回移除数目 |
zrem zset_key “aaa” => 1 |
ZCARD key |
返回有序集合包含的成员数目 |
zcard zset_key => 2 |
ZINCRBY key increment member |
将member的分值加上increment |
zincrby zset_key 2 “bbb” => 4 |
ZCOUNT key min max |
分值在min,max之间的数目 |
zcount zset_key 1 4 => 2 |
ZRANK key member |
返回member的排名 |
zrank zset_key “bbb” => 1 |
ZSCORE key member |
返回member的分值 |
zscore zset_key “bbb” => 4 |
ZRANGE key start stop [WITHSCORES] |
返回排名在start和stop之间的成员(返回各自的分值) |
zrange zset_key 0 3 withscores => [“ccc”, 3, “bbb”, 4] |
2 范围型数据(获取、删除、并集、交集)
操作 |
说明 |
举例 |
|
|
zrevrank key name |
返回member所处的位置,成员从大到小排序 |
|
|
|
zrevrange key start stop [WITHSCORES] |
分会给定范围的成员,成员从大到小排序 |
|
|
|
zrangebyscore key min max [WITHSCORES] [limit offset count] |
返回分值在min和max范围内的所有成员 |
|
|
|
zrevrangebyscore key min max [WITHSCORES] [limit offset count] |
返回分值在min和max范围内的所有成员,按照从大到小返回他们 |
|
|
|
zremrangebyrank key start stop |
移除排名在指定范围内的成员 |
|
|
|
zremrangebyscore key min max |
除分值在指定范围内的成员 |
|
|
|
zinterstore dest_key key_count key [key…][weights weight [weight …]] [aggregate sum |
min |
max] |
类似于求交集 |
|
zunionstore dest_key key_count key [key…][weights weight [weight …]] [aggregate sum |
min |
max] |
类似于求并集 |
|
2 深入浅出Redis-redis底层数据结构
深入浅出Redis-redis底层数据结构