总结了下Redis五种数据结构的特定,本文主要参考 《redis in action》。
字符串
首先,字符串类型是最基础的类型,在redis里面字符串可以存储3中类型的值,字节串、整数、浮点数。这里整数或者浮点数是可以执行自增或自减的。
字符串常用命令
列表
列表类似于数据结构的链表,可以给定int范围去显示这个列表中的数据。列表允许用户从序列的两端推入或者弹出元素,获取列表元素,以及执行各种常见的列表操作。
列表经常用来存储任务信息、最近浏览过的文章或者联系人信息等。
列表的一个主要优点在于他可以包含多个字符串值,而且都集中在一个区域,而且多个字符串是可以重复的。
列表常用命令
rpush list-key item
lrange list-key 0 -1
当你像队列一样使用列表时候,这些阻塞命令是非常有用的。
集合
redis的集合以无序的方式来存储多个各不相同的元素,用户可以快速地对集合执行添加元素操作、移除元素操作以及检查一个元素是否存在于集合中。集合跟列表不同之处在于,列表可以存储多个相同的字符串,而集合则通过使用散列来保证存储的字符串各不相同(这些散列表只有建,并没有与键相关联的值)。
因为redis讲的集合使用无序方式存储元素,所以用户不能像使用列表那样,从某一端推入元素,或者弹出元素。
集合常用命令
127.0.0.1:6379> sadd set-key item
(integer) 1
127.0.0.1:6379> sadd set-key item3
(integer) 1
127.0.0.1:6379> sadd set-key item
(integer) 0
127.0.0.1:6379> smembers set-key
1) "item2"
2) "item3"
3) "item"
127.0.0.1:6379> sismember set-key item2
(integer) 1
127.0.0.1:6379> sismember set-key item4
(integer) 0
127.0.0.1:6379> srem set-key item2
(integer) 1
127.0.0.1:6379> srem set-key item2
(integer) 0
127.0.0.1:6379> smembers set-key
散列
redis的散列可以存储多个键值对之间的映射。散列在很多方面就像一个微缩版的redis,不少字符串命令都有相应的散列版本。
一个key name的散列中,有多个key value对。我们可以把这种数据聚集看做是关系库中的行。
散列常用命令
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> hset hash-key sub-key1 value
(integer) 0
127.0.0.1:6379> hgetall hash-key
1) "sub-key1"
2) "value"
3) "sub-key2"
4) "value2"
127.0.0.1:6379> hdel hash-key sub-key2
(integer) 1
127.0.0.1:6379> hget hash-key sub-key1
"value"
127.0.0.1:6379> hgetall hash-key
1) "sub-key1"
2) "value"
尽管有hgetall存在,但是hkeys和hvalues也是非常有用的;如果散列包含的值非常大,那么用户可以先使用hkeys取出散列包含的所有键,然后使用hget取出我们需要的值,从而避免因为一次获取多个大体积的值而导致服务器阻塞。
有序集合
有序集合相比集合多出一个分值(score),分值必须为浮点数。有序集合既可以根据成员访问,又可以根据分值或分值的排列顺序来访问的结构。
有序集合常用命令
127.0.0.1:6379> zadd zset-key 982 menber0
(integer) 1
127.0.0.1:6379> zadd zset-key 982 member0
(integer) 1
127.0.0.1:6379> zadd zset-key 982 member0
(integer) 0
127.0.0.1:6379> zrange zset-key 0 -1 withscores
1) "member1"
2) "728"
3) "member0"
4) "982"
5) "menber0"
6) "982"
127.0.0.1:6379> zrange zset-key 0 -1
1) "member1"
2) "member0"
3) "menber0"
127.0.0.1:6379> zrangebyscore zset-key 0 800
1) "member1"
127.0.0.1:6379> zrem zset-key member1
(integer) 1
127.0.0.1:6379> zrem zset-key member1
(integer) 0
127.0.0.1:6379> zrange zset-key 0 -1 withscores
1) "member0"
2) "982"
3) "menber0"
4) "982"
下图展示了对两个输入有序集合执行交集运算并得到输出有序集合的过程,这次交集运算使用的是默认的聚合函数sum,所以输出有序集合成员的分值都是通过加法计算得出的。
下图展示了使用聚合函数min执行并集运算的过程。