码迷,mamicode.com
首页 > 其他好文 > 详细

Redis五种数据结构详解

时间:2018-08-25 14:40:11      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:字符串   聚集   bsp   命令   集中   总结   常用命令   text   联系   

  总结了下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执行并集运算的过程。

 技术分享图片

 

Redis五种数据结构详解

标签:字符串   聚集   bsp   命令   集中   总结   常用命令   text   联系   

原文地址:https://www.cnblogs.com/qixinbo/p/9533296.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!