当前位置:网站首页>Redis之五大基础数据结构深入、应用场景
Redis之五大基础数据结构深入、应用场景
2022-07-06 08:59:00 【~庞贝】
目录
Redis之五大基础数据结构深入、应用场景
0.业务数据
1.string
String 类型是 Redis 中最常使用的类型,内部的实现是通过 SDS(Simple Dynamic String )来存储的。SDS 类似于 Java 中的 ArrayList,可以通过预分配冗余空间的方式来减少内存的频繁分配。
存储的数据:单个数据,最简单的数据存储类型,也是最常用的数据存储类型
存储数据的格式:一个存储空间保存一个数据
存储内容:通常使用字符串,如果字符串以整数的形式展示,可以作为数字操作使用
1.2String基本操作
1.3String应用场景
String的实际应用场景比较广泛的有:
1.缓存功能:String字符串是最常用的数据类型,不仅仅是Redis,各个语言都是最基本类型,因此,利用Redis作为缓存,配合其它数据库作为存储层,利用Redis支持高并发的特点,可以大大加快系统的读写速度、以及降低后端数据库的压力。
2.计数器:许多系统都会使用Redis作为系统的实时计数器,可以快速实现计数和查询的功能。而且最终的数据结果可以按照特定的时间落地到数据库或者其它存储介质当中进行永久保存。
3.共享用户Session:用户重新刷新一次界面,可能需要访问一下数据进行重新登录,或者访问页面缓存Cookie,但是可以利用Redis将用户的Session集中管理,在这种模式只需要保证Redis的高可用,每次用户Session的更新和获取都可以快速完成。大大提高效率。//
1.4set与mset选择问题
时间由3部分组成:客户端发送指令到redisd的时间+redis执行执行时间+redis返回结果到客户端的时间;
以下我们假定 客户端发送指令到redisd的时间==redis返回结果到客户端的时间
1.5.string注意事项
1.6string作为数值操作
1.7应用场景-优化分表操作
Tip1: redis用于控制数据库表主键id,为数据库表主键提供生成策略,保障数据库表的主键唯一性
此方案适用于所有数据库,且支持数据库集群
1.8应用场景-热门商品推荐
Tip2:redis 控制数据的生命周期,通过数据是否失效控制业务行为,适用于所有具有时效性限定控制的操作
1.9应用场景-微博粉丝
Tip3:redis应用于各种结构型和非结构型高热度数据访问加速
2.Hash
2.1Hash介绍
这个是类似 Map 的一种结构,这个一般就是可以将结构化的数据,比如一个对象(前提是这个对象没嵌套其他的对象)给缓存在 Redis 里,然后每次读写缓存的时候,可以就操作 Hash 里的某个字段。
但是这个的场景其实还是多少单一了一些,因为现在很多对象都是比较复杂的,比如你的商品对象可能里面就包含了很多属性,其中也有对象。我自己使用的场景用得不是那么多。
2.2Hash基本操作
2.3Hash应用场景
这个是类似 Map 的一种结构,这个一般就是可以将结构化的数据,比如一个对象(前提是这个对象没嵌套其他的对象)给缓存在 Redis 里,然后每次读写缓存的时候,可以就操作 Hash 里的某个字段。
2.4Hash注意事项
2.5应用场景-电商网站购物车设计与实现
Tip4:redis 应用于购物车数据存储设计
2.6应用场景-抢购限购类商品
Tip5:redis 应用于抢购,限购类、限量发放优惠卷、激活码等业务的数据存储设计
2.7应用场景-string存储对象(json)与hash存储对象
3.List
3.1List介绍
3.2List基础操作
3.3List应用场景
List 是有序列表,这个还是可以玩儿出很多花样的。
比如可以通过 List 存储一些列表型的数据结构,类似粉丝列表、文章的评论列表之类的东西。
比如可以通过 lrange 命令,读取某个闭区间内的元素,可以基于 List 实现分页查询,这个是很棒的一个功能,基于 Redis 实现简单的高性能分页,可以做类似微博那种下拉不断分页的东西,性能高,就一页一页走。
比如可以搞个简单的消息队列,从 List 头怼进去,从 List 屁股那里弄出来。
List本身就是我们在开发过程中比较常用的数据结构了,热点数据更不用说了。
1.消息队列:Redis的链表结构,可以轻松实现阻塞队列,可以使用左进右出的命令组成来完成队列的设计。比如:数据的生产者可以通过Lpush命令从左边插入数据,多个数据消费者,可以使用BRpop命令阻塞的“抢”列表尾部的数据。
2.文章列表或者数据分页展示的应用。
比如,我们常用的博客网站的文章列表,当用户量越来越多时,而且每一个用户都有自己的文章列表,而且当文章多时,都需要分页展示,这时可以考虑使用Redis的列表,列表不但有序同时还支持按照范围内获取元素,可以完美解决分页查询功能。大大提高查询效率
3.4list注意事项
3.5应用场景-朋友圈点赞
Tip6:redis 应用于具有操作先后顺序的数据控制
3.6应用场景-粉丝关注列表
Tip7:redis 应用于最新消息展示
4.Set
4.1Set介绍
Set 是无序集合,会自动去重的那种。
直接基于 Set 将系统里需要去重的数据扔进去,自动就给去重了.
可以基于 Set 玩儿交集、并集、差集的操作,比如交集吧,我们可以把两个人的好友列表整一个交集,看看俩人的共同好友是谁?对吧。
反正这些场景比较多,因为对比很快,操作也简单,两个查询一个Set搞定。
4.2Set基本操作
4.3Set应用场景
4.4Set注意事项
4.5应用场景-热点推荐
Tip8:redis 应用于随机推荐类信息检索,例如热点歌单推荐,热点新闻推荐,热卖旅游线路,应用APP推荐,大V推荐等
4.6应用场景-关联搜索
Tips 9:redis 应用于同类信息的关联搜索,二度关联搜索,深度关联搜索
1.显示共同关注(一度)
2.显示共同好友(一度)
3.由用户A出发,获取到好友用户B的好友信息列表(一度)
4.由用户A出发,获取到好友用户B的购物清单列表(二度)
5.由用户A出发,获取到好友用户B的游戏充值列表(二度)
Tips 10:redis 应用于同类型不重复数据的合并、取交集操作
4.7应用场景-网站访问去重
Tip11:redis应用于同类型数据的快速去重
4.9应用场景-黑白名单
Tip12:redis应用于基于黑名单与白名单设定的服务设定
5.SortedSet
5.1SortedSet介绍
Sorted set 是排序的 Set,去重但可以排序,写进去的时候给一个分数,自动根据分数排序。
有序集合的使用场景与集合类似,但是set集合不是自动有序的,而Sorted set可以利用分数进行成员间的排序,而且是插入时就排序好。所以当你需要一个有序且不重复的集合列表时,就可以选择Sorted set数据结构作为选择方案。
1.排行榜:有序集合经典使用场景。例如视频网站需要对用户上传的视频做排行榜,榜单维护可能是多方面:按照时间、按照播放量、按照获得的赞数等。
2.用Sorted Sets来做带权重的队列,比如普通消息的score为1,重要消息的score为2,然后工作线程可以选择按score的倒序来获取工作任务。让重要的任务优先执行。
3.微博热搜榜,就是有个后面的热度值,前面就是名称
5.2SortedSet基本操作
5.3SortedSet应用场景
5.4SortedSet注意事项
5.5应用场景-海选投票
Tip13:redis应用于计数器组合排序功能对应的排名
5.6应用场景-会员过期
Tip14:redis应用于定时任务执行顺序管理或任务过期管理
5.7应用场景-任务权重
Tip15:应用于即时任务/消息队列执行管理
6.redis业务场景-语音调用
Tip16:redis应用于限时按次结算的服务控制
7.redis业务场景-聊天顶置
Tips17:redis应用于基于时间顺序的数据操作,而不关注具体时间
8.redis应用场景
Tips 1:redis用于控制数据库表主键id,为数据库表主键提供生成策略,保障数据库表的主键唯一性
Tips 2:redis 控制数据的生命周期,通过数据是否失效控制业务行为,适用于所有具有时效性限定控制的操作
Tips 3:redis应用于各种结构型和非结构型高热度数据访问加速
Tips 4:redis 应用于购物车数据存储设计
Tips 5:redis 应用于抢购,限购类、限量发放优惠卷、激活码等业务的数据存储设计
Tips 6:redis 应用于具有操作先后顺序的数据控制
Tips 7:redis 应用于最新消息展示
Tips 8:redis 应用于随机推荐类信息检索,例如热点歌单推荐,热点新闻推荐,热卖旅游线路,应用APP推荐,大V推荐等
Tips 9:redis 应用于同类信息的关联搜索,二度关联搜索,深度关联搜索
Tips 10:redis 应用于同类型不重复数据的合并、取交集操作
Tips 11:redis 应用于同类型数据的快速去重
Tips 12:redis 应用于基于黑名单与白名单设定的服务控制
Tips 13:redis 应用于计数器组合排序功能对应的排名
Tips 14:redis 应用于定时任务执行顺序管理或任务过期管理
Tips 15:redis 应用于及时任务/消息队列执行管理
Tips 16:redis 应用于按次结算的服务控制
Tips 17:redis 应用于基于时间顺序的数据操作,而不关注具体时间
边栏推荐
猜你喜欢
UML图记忆技巧
LeetCode:236. 二叉树的最近公共祖先
LeetCode:498. Diagonal traversal
Once you change the test steps, write all the code. Why not try yaml to realize data-driven?
KDD 2022 paper collection (under continuous update)
Selenium+Pytest自动化测试框架实战(下)
LeetCode:124. 二叉树中的最大路径和
TP-LINK enterprise router PPTP configuration
Advanced Computer Network Review(3)——BBR
Booking of tourism products in Gansu quadrupled: "green horse" became popular, and one room of B & B around Gansu museum was hard to find
随机推荐
一篇文章带你了解-selenium工作原理详解
[MySQL] limit implements paging
LeetCode:387. The first unique character in the string
数字人主播618手语带货,便捷2780万名听障人士
Selenium+Pytest自动化测试框架实战
What is an R-value reference and what is the difference between it and an l-value?
[oc foundation framework] - < copy object copy >
Li Kou daily question 1 (2)
七层网络体系结构
[OC-Foundation框架]--<Copy对象复制>
Compétences en mémoire des graphiques UML
[MySQL] multi table query
[oc]- < getting started with UI> -- common controls uibutton
Leetcode: Jianzhi offer 03 Duplicate numbers in array
LeetCode:236. The nearest common ancestor of binary tree
LeetCode:673. 最长递增子序列的个数
[OC]-<UI入门>--常用控件-UIButton
To effectively improve the quality of software products, find a third-party software evaluation organization
Cesium draw points, lines, and faces
Selenium+pytest automated test framework practice