一、Redis基本数据结构介绍

2020-08-04  本文已影响0人  Suny____

本文参考书籍:《Redis开发与运维》

1、Redis的作用

2、Redis可执行文件说明

可执行文件 作用
redis-server 启动Redis
redis-cli Redis命令行客户端
redis-benchmark Redis基准测试工具
redis-check-aof Redis AOF持久化文件检测和修复工具
redis-check-dump Redis RDB持久化文件检测和修复工具
redis-sentinel 启动Redis Sentinel

Redis版本号第二位按奇偶分为开发版本和稳定版本,如2.9、3.1这样就是开发版本,3.0、3.2就是稳定版本

3、Redis对外的数据结构和内部编码

通过object encoding <key> 查询内部编码


image.png

Redis客户端每次执行命令都经过了三个阶段:发送命令、执行命令、返回结果

image.png

因为Redis是单线程执行命令,所以一条命令从客户端到服务端不会立即执行,所有命令都会进入一个队列,然后逐条被执行,不会存在同时执行多条命令的情况。

image.png

Redis单线程架构

Redis使用了单线程架构和I/O多路复用模型来实现高性能的内存数据库服务


image.png

为什么单线程模型性能如此高

4、Redis基础数据结构

image.png

字符串(string)

字符串是Redis中最基础的数据结构,其他几种数据结构都是在字符串类型的基础上构建的。
字符串的值实际可以是字符串(简单的字符串、复杂的字符串(JSON、XML))、数字(整数、浮点),甚至是二进制(图片、音频、视频),但是值最大不能超过512MB。

image.png

使用场景:

哈希(hash)

哈希类型是指键值本身又是一个键值对结构。
哈希类型中的映射关系叫做field-value,这里的value是指field对应的值,不是键对应的值。


image.png

哈希的内部编码有两种:

使用场景:

可以存储用户信息,使用哈希类型存储会变得更加直观,操作也更加便捷。同样的用户信息存在关系型数据库和Redis中的哈希结构对比:
一、哈希类型是稀疏的,而关系型数据库是完全结构化的。例如:哈希类型每个键都可以有不同的field,而关系型数据库一旦添加新列,所有行都要为其设置值(即使为null)。

image.png

二、关系型数据库可以做复杂的关系查询,而Redis去模拟关系型复杂查询开发困难,维护成本高。

image.png

列表(list):

列表类型是用来存储多个有序的字符串,列表中的每个字符串称为元素(element),一个列表最多可以存储2^32 - 1个元素。

可以对列表两端插入(push)和弹出(pop),还可以获取指定范围的元素列表、获取指定索引下的元素等。

列表是一种比较灵活的数据结构,它可以充当栈和队列的角色。

image.png

列表类型的特点:

列表的内部编码有两种:

使用场景:

实际列表的使用场景很多,在选择时可以参考以下组合:

集合(set)

集合类型也是用来保存多个的字符串元素,但和列表类型不一样的是,集合中不允许有重复元素,并且集合中的元素是无序的,不能通过索引填表获取元素。

一个集合最多可以存储2^32 - 1个元素。Redis除了支持集合内的增删改查,同时还支持多个集合取交集、并集、差集。

image.png

集合类型的内部编码有两种:

使用场景:

集合类型比较典型的使用场景是标签(tag)。例如一个用户可能对娱乐、体育比较感兴趣,另一个用户可能对历史、新闻感兴趣,这些兴趣点就是标签。有了这些数据就可以得到喜欢同一个标签的人,以及用户的共同洗好的标签,这些数据对于用于体验以及增强用户黏度比较重要。可以对不同标签的用户做不同类型的推荐。


image.png

代码例子:

sadd user:1:tags tag1 tag2
sadd user:2:tags tag2 tag3
....
sadd user:n:tags tag5 tag6
sadd tag1:users user1 user2
sadd tag2:users user2 user3
...

用户和标签的关系应该维护在一个事务里,防止部分命令失败造成的数据不一致。

sinter user:1:tags user:2:tag2

使用集合类型的应用场景可以参考如下几点:

有序集合(zset)

有序集合保留了集合不能重复成员的特性,但有序集合中的元素可以排序。但是它与列表的排序不同,它给每个元素设置一个分数(score)作为排序的依据。

有序集合提供了获取指定分数和元素范围查询、计算成员排名等功能。

image.png

有序集合类型的内部编码有两种:

image.png

使用场景:

有序集合典型的使用场景是排行榜系统。例如:视频网站需要对用户上传视频做排行榜,榜单的维度可能是多个方面的:按时间、按播放量、按获得的赞数等。


image.png
上一篇下一篇

猜你喜欢

热点阅读