NoSQL数据库Redis支持的五种数据结构及使用场景

  众所周知,Redis相比同样作为缓存服务器的memcached而言,除了有持久化的功能外,还比着memcached有更多丰富的数据结构,今天就来讲一下Redis支持的五种数据结构:String(字符串)、Hash(哈希)、List(列表)、Set(集合)、Sorted Set(有序集合)。

1、String(字符串)

可以是字符串,整数或者浮点数,对整个字符串或者字符串中的一部分执行操作,对整个整数或者浮点执行自增(increment)或者自减(decrement)操作。
基本命令:
get:获取存储在指定键中的值
set:设置存储在指定键中的值
del:删除存储在指定键中的值

除了以上基本的命令,还提供以下功能,可以在具体的场景中应用:

---LEN key:获取字符串长度
---APPEND key 内容:往字符串 append 内容,而且采用智能分配内存(每次2倍)
---设置和获取字符串的某一段内容
---设置及获取字符串的某一位(bit)
---批量设置一系列字符串的内容
---原子计数器
---GETSET 命令的妙用,请于清空旧值的同时设置一个新值,配合原子计数器使用

2、Hash(哈希)

Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。Redis 中每个 hash 可以存储40多亿 键值对。

基本命令:
hset:在散列里面关联起指定的键值对
hget:获取指定散列键的值
hgetall:获取散列包含的所有键值对
hdel:如果给定键存在于散列里面,那么移除这个键

使用场景:Redis 的 Hash 结构可以使你像在数据库中 Update 一个属性一样只修改某一项属性值,常用于存储、读取、修改用户属性。

3、List(列表)

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边),一个列表最多可以包含 2^32 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。

基本命令:
rpush:将给定值推入列表的右端
lrange:获取列表在指定范围上的所有值
lindex:获取列表在指定范围上的单个元素
lpop:从列表的左端弹出一个值,并返回被弹出的值

使用场景:List 说白了就是链表(redis 使用双端链表实现的 List),使用 List 结构,我们可以轻松地实现最新消息排行等功能;List 的另一个应用就是消息队列,可以利用 List 的 *PUSH 操作,将任务存在 List 中,然后工作线程再用 POP 操作将任务取出进行执行。Redis 还提供了操作 List 中某一段元素的 API,你可以直接查询,删除 List 中某一段的元素。比如微博 TimeLine和消息队列。

4、Set(集合)

Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。可以添加,获取,移除单个元素,检查一个元素是否存在于集合中,计算交集,并集,差集,从集合里面随机获取元素。集合中最大的成员数为 2^32 - 1 (4294967295, 每个集合可存储40多亿个成员)。

基本命令:
sadd:将给定元素添加到集合
smembers:返回集合包含的所有元素
sismember:检查指定元素是否存在于集合中
srem:检查指定元素是否存在于集合中,那么移除这个元素

使用场景:Set 就是一个集合,集合的概念就是一堆不重复值的组合。利用 Redis 提供的 Set 数据结构,可以存储一些集合性的数据。比如在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。因为 Redis 非常人性化的为集合提供了求交集、并集、差集等操作,那么就可以非常方便的实现如共同关注、共同喜好、二度好友等功能,对上面的所有集合操作,你还可以使用不同的命令选择将结果返回给客户端还是存集到一个新的集合中。

---共同好友、二度好友
---利用唯一性,可以统计访问网站的所有独立 IP
---好友推荐的时候,根据 tag 求交集,大于某个 threshold 就可以推荐

5、Sorted Set(有序集合)

Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

基本命令:
zadd:将一个带有给定分值的成员添加到有序集合里面
zrange:根据元素在有序排列中所处的位置,从有序集合里面获取多个元素
zrangebyscore:获取有序集合在给定分值范围内的所有元素
zrem:如果指定成员存在于有序集合中,那么移除这个成员

使用场景:和Sets相比,Sorted Sets是将 Set 中的元素增加了一个权重参数 score,使得集合中的元素能够按 score 进行有序排列,比如一个存储全班同学成绩的 Sorted Sets,其集合 value 可以是同学的学号,而 score 就可以是其考试得分,这样在数据插入集合的时候,就已经进行了天然的排序。另外还可以用 Sorted Sets 来做带权重的队列,比如普通消息的 score 为1,重要消息的 score 为2,然后工作线程可以选择按 score 的倒序来获取工作任务。让重要的任务优先执行。
---带有权重的元素,比如一个游戏的用户得分排行榜
---比较复杂的数据结构,一般用到的场景不算太多

注:除了以上基本的操作命令外,Redis还提供了其他很多丰富的操作命令,可以在官网(https://redis.io/commands)查看这些命令并学习。

猜你喜欢

转载自blog.csdn.net/Apeopl/article/details/84869686
今日推荐