Redis数据结构

参考自 Redis in acion 中文版

字符串

Redis的字符串就是一个由字节组成的序列。

在Redis里面,字符串可以存储以下3种类型的值。

  • 字节串(byte string)。
  • 整数。
  • 浮点数

用户可以通过给定一个任意的数值,对存储着整数或者浮点数的字符串执行自增(increment)或者自减(decrement)操作

在有需要的时候,Redis还会将整数转换成浮点数

命令 用例和描述
INCR INCR key-name—将键存储的值加上1
DECR DECR key-name—将键存储的值减去1
INCRBY INCRBY key-name amount—将键存储的值加上整数amount
DECRBY DECRBY key-name amount—将键存储的值减去整数amount
INCRBYFLOAT INCRBYFLOAT key-name amount—将键存储的值加上浮点数amount,这个命令在Redis 2.6或以上的版本可用
命令 用例和描述
APPEND APPEND key-name value—将值value追加到给定键key-name当前存储的值的末尾
GETRAN GEGETRANGE key-name start end—获取一个由偏移量start至偏移量end范围内所有字符组成的子串,包括start和end在内
SETRANG ESETRANGE key-name offset value—将从start偏移量开始的子串设置为给定值
... ...

列表

一个列表结构可以有序地存储多个字符串。

命令 用例和描述
RPUSH RPUSH key-name value [value ...]—将一个或多个值推入列表的右端
LPUSH LPUSH key-name value [value ...]—将一个或多个值推入列表的左端
RPOP RPOP key-name—移除并返回列表最右端的元素
LPOP LPOP key-name—移除并返回列表最左端的元素
LINDEX LINDEX key-name offset—返回列表中偏移量为offset的元素
LRANGE LRANGE key-name start end—返回列表从start偏移量到end偏移量范围内的所有元素,其中偏移量为start和偏移量为end的元素也会包含在被返回的元素之内
LTRIM LTRIM key-name start end—对列表进行修剪,只保留从start偏移量到end偏移量范围内的元素,其中偏移量为start和偏移量为end的元素也会被保留
127.0.0.1:6379> rpush list-key tiem
(integer) 1
127.0.0.1:6379> rpush list-key item2
(integer) 2
127.0.0.1:6379> rpush list-key tiem
(integer) 3
127.0.0.1:6379> lrange list-key 0 -1
1) "tiem"
2) "item2"
3) "tiem"
127.0.0.1:6379> lindex list-key 1
"item2"
127.0.0.1:6379> lpop list-key
"tiem"
127.0.0.1:6379> lrange list-key 0 -1
1) "item2"
2) "tiem"

Redis的集合

集合则通过使用散列表来保证自己存储的每个字符串都是各不相同的。

Redis的集合使用无序(unordered)方式存储元素,所以用户不能像使用列表那样,将元素推入集合的某一端,或者从集合的某一端弹出元素。

命令 用例和描述
SADD 将给定元素添加到集合
SMEMBERS 返回集合包含的所有元素
SISMEMBER 检查给定元素是否存在于集合中
SREM 如果给定的元素存在于集合中,那么移除这个元素

集合除了基本的添加操作和移除操作之外,还支持很多其他操作。SINTER、SUNION、SDIFF这3个命令就可以分别执行常见的交集计算、并集计算和差集计算。

127.0.0.1:6379> sadd set-key item
(integer) 1
127.0.0.1:6379> sadd set-key item2
(integer) 1
127.0.0.1:6379> sadd set-key item3
(integer) 1
127.0.0.1:6379> 
127.0.0.1:6379> sadd set-key item
(integer) 0
127.0.0.1:6379> smembers set-key
1) "item3"
2) "item2"
3) "item"
127.0.0.1:6379> sismember set-key item4
(integer) 0
127.0.0.1:6379> sismember set-key item
(integer) 1
127.0.0.1:6379> srem set-key item2
(integer) 1
127.0.0.1:6379> smembers set-key
1) "item3"
2) "item"
127.0.0.1:6379> 

散列

Redis的散列可以存储多个键值对之间的映射。和字符串一样,散列存储的值既可以是字符串又可以是数字值,并且用户同样可以对散列存储的数字值执行自增操作或者自减操作。

命令 用例和描述
HSET 在散列里面关联起给定的键值对
HGET 获取指定散列键的值
HGETALL 获取散列包含的所有键值对
HDEL 如果给定键存在于散列里面,那么移除这个键
127.0.0.1:6379> hset hash-key sub-key value3
(integer) 0
127.0.0.1:6379> hset hash-key sub-key1 value1
(integer) 1
127.0.0.1:6379> hset hash-key sub-key2 value2
(integer) 1
127.0.0.1:6379> hset hash-key sub-key1 value1
(integer) 0
127.0.0.1:6379> hgetall hash-key
1) "sub-key"
2) "value3"
3) "sub-key1"
4) "value1"
5) "sub-key2"
6) "value2"
127.0.0.1:6379> hdel hash-key sub-key2
(integer) 1
127.0.0.1:6379> hget hash-key sub-key
"value3"
127.0.0.1:6379> hgetall hash-key
1) "sub-key"
2) "value3"
3) "sub-key1"
4) "value1"
127.0.0.1:6379> 

有序集合

有序集合和散列一样,都用于存储键值对:有序集合的键被称为成员(member),每个成员都是各不相同的;而有序集合的值则被称为分值(score), 分值必须为浮点数

有序集合是Redis里面唯一一个既可以根据成员访问元素(这一点和散列一样),又可以根据分值以及分值的排列顺序来访问元素的结构

命令 用例和描述
ZADD 将一个带有给定分值的成员添加到有序集合里面
ZRANGE 根据元素在有序排列中所处的位置,从有序集合里面获取多个元素
ZRANGEBYSCORE 获取有序集合在给定分值范围内的所有元素
ZREM 如果给定成员存在于有序集合,那么移除这个成员
127.0.0.1:6379> zadd zset-key 100 member1
(integer) 1
127.0.0.1:6379> zadd zset-key 200 member0
(integer) 1
127.0.0.1:6379> zadd zset-key 300 member0
(integer) 0
127.0.0.1:6379> zrange zset-key 0 -1 withscores
1) "member1"
2) "100"
3) "member0"
4) "300"
127.0.0.1:6379> zrangebyscore zset-key 0 250
1) "member1"
127.0.0.1:6379> zrangebyscore zset-key 0 250 withscores
1) "member1"
2) "100"
127.0.0.1:6379> 
原文地址:https://www.cnblogs.com/AganRun/p/11816131.html