Redis入门到精通2---(数据类型)

数据存储类型

业务数据的特殊性

Redis入门到精通2---(数据类型)_第1张图片
Redis入门到精通2---(数据类型)_第2张图片

Redis数据类型(常用)

Redis支持五种数据类型:
string(字符串),
hash(哈希),
list(列表),
set(集合),
zset(sorted set:有序集合)。

Redis数据存储格式

Redis入门到精通2---(数据类型)_第3张图片

String(字符串)类型

Redis入门到精通2---(数据类型)_第4张图片

String类型的基本操作

Redis入门到精通2---(数据类型)_第5张图片
Redis入门到精通2---(数据类型)_第6张图片

单数据操作和多数据操作的选择

单指令1条数据发送(set)指令,执行指令查询一条数据,返回(result)结果。总共三个步骤,假设这是3秒。
单指令3条数据就是将步骤重复三次,加起来就是9秒。

多指令3条数据,数据发送(set)指令,执行查询命令查询三条数据,返回(result)结果。
多指令只需要发送一次指令和一次接受就可以,但是查询数据是三条,加起来就是5秒。

但是这也不能说明查询数据需要全部都使用多指令查询,如果查询数据较大执行查询的命令就会阻塞,而迟迟不返回结果,这就会导致用户体验极差。
所以要折中一下,比如有10000条数据,一次性查询1000条查询10次,这样就不会阻塞,查询完一部分就返还给用户一部分。

总结:如果数据比较庞大一定要进行切割。
Redis入门到精通2---(数据类型)_第7张图片

string类型数据的扩展操作

业务场景1-表过于庞大

在大型的企业应用中,一张表不能由它任意扩张,这会导致表的数据太过于庞大,不利于查询。
这时就有了分表操作,而对应的ID必须保持一致性,不能重复,Redis就可以解决。
Redis入门到精通2---(数据类型)_第8张图片

解决方案-分表

Redis入门到精通2---(数据类型)_第9张图片

string作为数值操作

Redis入门到精通2---(数据类型)_第10张图片

业务场景2-控制时间

Redis入门到精通2---(数据类型)_第11张图片

解决方案-指定数据生命周期

如果指定了数据的生命周期,然后使用set指令,那么生命周期就会失效。
Redis入门到精通2---(数据类型)_第12张图片

业务场景3-高频访问信息

Redis入门到精通2---(数据类型)_第13张图片

解决方案-高热度数据访问加速

Redis入门到精通2---(数据类型)_第14张图片
Key的设置约定:
Redis入门到精通2---(数据类型)_第15张图片

string类型数据操作的注意事项

Redis入门到精通2---(数据类型)_第16张图片

hash(哈希)类型

存储困惑

使用json方便存储数据,但是修改时就显的很笨重。
Redis入门到精通2---(数据类型)_第17张图片

hash类型

Redis入门到精通2---(数据类型)_第18张图片

hash类似数据的基本操作

单个操作:
Redis入门到精通2---(数据类型)_第19张图片
多个操作:
Redis入门到精通2---(数据类型)_第20张图片

hash数据类型扩展操作

Redis入门到精通2---(数据类型)_第21张图片

hash类型数据操作注意事项

Redis入门到精通2---(数据类型)_第22张图片

hash类型应用场景

业务场景1-电商购物车

Redis入门到精通2---(数据类型)_第23张图片

解决方案

Redis入门到精通2---(数据类型)_第24张图片
思考:

Redis入门到精通2---(数据类型)_第25张图片
Redis入门到精通2---(数据类型)_第26张图片

业务场景2

Redis入门到精通2---(数据类型)_第27张图片

解决方案

Redis入门到精通2---(数据类型)_第28张图片

list(列表)类型

双向链表
顺序表:它的数据一个挨一个,由于间距相同,所以查询速度较快,但是想要添加一个节点就要将所有节点挪动才可以添加,较费时。

链表:链表的出现就解决了这样的问题,添加数据时不用全部节点都移动,至于将链切断再连接到新的节点即可。但是链表没有索引,只能一个一个的往后面找,查找较慢。

双向链表:左右可以随意进出。
Redis入门到精通2---(数据类型)_第29张图片

list类型数据基本操作

获取数据时,是从左获取。
获取全部数据时下标为0到-1。
Redis入门到精通2---(数据类型)_第30张图片

list类型数据扩展操作

规定时间内获取数据,如果没有数据返回空。
Redis入门到精通2---(数据类型)_第31张图片

业务场景1-点赞

说说是key,点赞人数是value,点赞功能是rpush。
Redis入门到精通2---(数据类型)_第32张图片
如果有人取消点赞那么就从这个中间拿掉一个元素,后面的跟上。
Redis入门到精通2---(数据类型)_第33张图片

解决方案

Redis入门到精通2---(数据类型)_第34张图片

list类型数据操作注意事项

Redis入门到精通2---(数据类型)_第35张图片

业务场景2-最新消息的展示

Redis入门到精通2---(数据类型)_第36张图片

解决方案

Redis入门到精通2---(数据类型)_第37张图片

set(集合)类型

Redis入门到精通2---(数据类型)_第38张图片

set类型数据基本操作

Redis入门到精通2---(数据类型)_第39张图片
Redis入门到精通2---(数据类型)_第40张图片

set类型数据的扩展操作

业务场景1-随机推送

Redis入门到精通2---(数据类型)_第41张图片

解决方案

Redis入门到精通2---(数据类型)_第42张图片

业务场景2-推荐好友

Redis入门到精通2---(数据类型)_第43张图片

解决方案

Redis入门到精通2---(数据类型)_第44张图片
交、并、差集:
交集:两个集合中相同的数据就是交集。
并集:两个集合加在一起的集合就是并集。
差集:差集是有方向性的,A和B比较、B和A比较的结果是不一样的。
Redis入门到精通2---(数据类型)_第45张图片
Redis入门到精通2---(数据类型)_第46张图片

set类型数据的操作注意事项

Redis入门到精通2---(数据类型)_第47张图片

业务场景3-员工业务

Redis入门到精通2---(数据类型)_第48张图片

解决方案

Redis入门到精通2---(数据类型)_第49张图片

业务场景4-统计访问次数

Redis入门到精通2---(数据类型)_第50张图片

解决方案

Redis入门到精通2---(数据类型)_第51张图片

业务场景5-黑名单

Redis入门到精通2---(数据类型)_第52张图片

解决方案

Redis入门到精通2---(数据类型)_第53张图片

sorted_set(有序集合)类型

score不是存储数据的,它是用来排序的。
Redis入门到精通2---(数据类型)_第54张图片

sorted_set类型数据的基本操作

Redis入门到精通2---(数据类型)_第55张图片
Redis入门到精通2---(数据类型)_第56张图片
使用limit获取查询结果的前3个数据。
Redis入门到精通2---(数据类型)_第57张图片
zinterstore集合交操作
zunionstore集合并操作
Redis入门到精通2---(数据类型)_第58张图片
交并操作执行完成后会把数据求和,还可以获取最大最小值。

sorted_set类型数据的扩展操作

业务场景1-榜单排序

Redis入门到精通2---(数据类型)_第59张图片

解决方案

Redis入门到精通2---(数据类型)_第60张图片
Redis入门到精通2---(数据类型)_第61张图片

sorted_set类型数据操作的注意事项

Redis入门到精通2---(数据类型)_第62张图片

业务场景2-管理VIP

Redis入门到精通2---(数据类型)_第63张图片

解决方案

Redis入门到精通2---(数据类型)_第64张图片

业务场景3-任务或消息待处理

在这里插入图片描述

解决方案

Redis入门到精通2---(数据类型)_第65张图片

数据类型实践案例

业务场景1-判断调用次数

Redis入门到精通2---(数据类型)_第66张图片

解决方案-SETEX key seconds value

Redis入门到精通2---(数据类型)_第67张图片
Redis入门到精通2---(数据类型)_第68张图片

解决方案改良-取消最大值的判定

使用最大值操作上限异常,视为使用上限。
Redis入门到精通2---(数据类型)_第69张图片
Redis入门到精通2---(数据类型)_第70张图片

业务场景2-最近接受消息队列

在这里插入图片描述

业务分析

每一个微信消息都有置顶功能,假设使用的是100手机,有连个置顶400手机和500手机。
Redis入门到精通2---(数据类型)_第71张图片
300向100发送消息,首先要喝置顶去比较,没有300,放到普通中去。
Redis入门到精通2---(数据类型)_第72张图片
Redis入门到精通2---(数据类型)_第73张图片
400发送消息,先判断400在置顶用户中吗?在,就放在置顶中。
Redis入门到精通2---(数据类型)_第74张图片
200发送消息,先比较置顶用户,没有,放在普通中去。
Redis入门到精通2---(数据类型)_第75张图片
200又发送了一条消息,先比较置顶,没有,然后再比较普通,有,就将原来的200删掉,然后再将200放进去。
因为,接受到的消息都是从右侧进去的,而用户看到的也是从右侧出去的,删掉已有的手机消息,再插入新的消息,这样才能让用户看到最新发送消息的手机。
Redis入门到精通2---(数据类型)_第76张图片
300发送消息,先比较置顶,没有,再比较普通,有,将原来的300删除掉,再重新放入300手机的消息,这样用户就在普通的最前面看到了最新发送消息的300了。
Redis入门到精通2---(数据类型)_第77张图片
Redis入门到精通2---(数据类型)_第78张图片
现在100手机看消息时,排在最前的是置顶中的400,然后是普通中的300,因为他是最新发送消息的,然后是200。
Redis入门到精通2---(数据类型)_第79张图片

解决方案

Redis入门到精通2---(数据类型)_第80张图片

你可能感兴趣的:(Redis)