Redis(7) - 深入浅出Redis-redis底层数据结构(上) - redis五种数据类型总结

2019/04/20

Redis五种基本数据类型总结

啥也不说,就是努力。

  1. redis的数据类型
  2. 数据类型存储原理

深入浅出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 对整数、浮点数进行增减操作;对字符串进行截取等相关操作

自增自减命令

redis_add

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 处理子串和二进制位的命令

redis_bin

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底层数据结构


Show Disqus Comments

Post Directory