当前位置: 首页 > news >正文

Redis使用场景 | 建议收藏✨

我 | 在这里
⭐ 全栈开发攻城狮、全网10W+粉丝、2022博客之星后端领域Top1、专家博主。
🎓擅长 指导毕设 | 论文指导 | 系统开发 | 毕业答辩 | 系统讲解等。已指导60+位同学顺利毕业
✈️个人公众号:热爱技术的小郑。回复 Java全套视频教程前端全套视频教程 即可获取 300G+ 教程资料,以及大量毕设项目源码。
🐬专注干货知识分享、项目实战案例开发分享
🚪 传送门:Github毕设源码仓库

更多文章
点我查看 超多精彩文章!!!

在这里插入图片描述

一、redis使用场景

1、热点数据的缓存

  由于 Redis 访问速度快且支持多种数据类型,非常适合用于存储热点数据。此外,结合 expire 功能,我们可以为缓存设置过期时间,并在到期后执行缓存更新操作。这种机制在项目开发中非常常见,几乎所有的项目都会运用到。

2、限时业务的运用

  Redis 中可以使用 expire 命令为键设置生存时间,时间到期后 Redis 会自动删除该键。基于这一特性,Redis 常用于限时优惠活动信息、手机验证码等需要时效性的业务场景。

3、计数器相关问题

  Redis 的 INCRBY 命令具有原子性递增的特性,因此非常适合应用于高并发场景。例如在秒杀活动中,它可以确保库存的精确减少。同时,INCRBY 也可以用于生成分布式序列号。在实际业务中,其应用场景还包括限制手机号发送短信的次数、限制接口在一分钟内的请求次数、以及限制接口每日调用次数等。这些功能依赖于 INCRBY 的原子性,确保在高并发环境下的数据一致性和可靠性。

4、排行榜相关问题

  由于关系型数据库在处理排行榜查询时速度较慢,因此可以借助 Redis 的 SortedSet 实现热点数据的排序。在一次奶茶活动中,我们需要展示各部门的点赞排行榜。为此,我为每个部门创建了一个 SortedSet,将用户的 openid 作为 username,用户的点赞数作为 score。针对每个用户,还存储了一个 hash,以保存用户的详细信息。通过 ZRANGEBYSCORE,我们可以根据点赞数获取排行榜,再根据 username 获取对应的用户 hash 数据。在实际应用中,这种方案的性能表现非常出色。

5、分布式锁

  这个方案主要利用了 Redis 的 SETNX 命令进行分布式锁的控制。SETNX(“set if not exists”)的作用是:如果键不存在,则设置缓存并返回 1,表示成功;如果键已存在,则返回 0,表示设置失败。我们在“俞你奔远方”的后台中使用了这一特性,因为服务器是集群架构,定时任务可能会在多台机器上同时运行。因此,在定时任务中,首先通过 SETNX 设置一个锁(lock),如果成功设置则执行任务;若设置失败,则说明该任务已被另一台机器执行。

  为了避免任务重复执行,可以给这个锁设置一个过期时间。例如,一个任务每 30 分钟执行一次,锁的过期时间可以设置为小于 30 分钟的时间,这样可以防止任务因异常未释放锁而陷入死锁。这一特性也可以应用于其他需要分布式锁的场景,结合过期时间来确保系统的稳定性和可靠性。

6、延时操作

  目前,我已经针对该特性做过相关测试,但尚未在实际项目中应用。下面举一个典型应用场景:

   比如,在订单生成后,我们会暂时占用库存,并在10分钟后检查用户是否真正完成购买。如果用户未购买,则将该订单设置为无效,同时还原库存。由于 Redis 自 2.8.0 版本后提供了 Keyspace Notifications 功能,允许客户端订阅 Pub/Sub 频道,以接收影响 Redis 数据集的事件。基于此特性,我们可以用以下方案解决上述需求:

  在订单生成时,设置一个 key,并设置为10分钟后过期。在后台实现一个监听器,监听该 key 的失效事件。当 key 失效时,触发后续的业务逻辑,如将订单标记为无效、还原库存等。当然,类似的需求也可以通过 RabbitMQ、ActiveMQ 等消息中间件的延迟队列服务来实现。

  这个方案不仅简化了逻辑,还能有效处理订单超时的情况。

7、分页、模糊搜索

   Redis 的 ZRANGEBYLEX 方法用于在有序集合(zset)中进行字典区间查询,语法如下:

  ZRANGEBYLEX key min max [LIMIT offset count]
  例如,通过 ZRANGEBYLEX zset - + LIMIT 0 10 可以进行分页查询,其中 - 和 + 表示获取集合中的全部数据。

  ZRANGEBYLEX key min max 还能返回指定字典区间的数据,利用这一特性可以实现模糊查询功能。当前,这也是我在 Redis 中发现的唯一支持对存储内容进行模糊查询的功能。

  几天前,我通过这个特性对学校数据进行了一次模拟测试,数据量大约为 60 万条,查询响应时间约为 700ms,略快于 MySQL 的 LIKE 查询。虽然速度上差距不大,但由于 ZRANGEBYLEX 可以避免大量的数据库 IO 操作,总体上对系统性能的保障要优于直接在 MySQL 中进行查询。

8、点赞、好友等相互关系的存储

  Redis 的 Set 提供了类似于 List 的列表功能,但其特殊之处在于 Set 能自动去重。当你需要存储一组数据且不希望有重复时,Set 是一个非常好的选择。此外,Set 还提供了判断某个成员是否存在于集合中的重要接口,这是 List 无法实现的。

  例如,在微博应用中,每个用户的关注者可以存储在一个 Set 中,这样就可以很方便地计算两个人的共同好友。

  在奶茶活动中,我们利用 Set 来存储用户之间的点赞关系。在用户点赞之前,我们通过 SISMEMBER 方法判断该用户是否已经点赞过。这个接口的响应时间非常快,通常在 10 毫秒以内,极为高效,保证了系统的性能。

9、队列

  由于 Redis 提供了 LIST PUSH 和 LIST POP 这样的命令,因此可以非常方便地实现队列操作。这使得 Redis 能高效地处理先进先出(FIFO)或后进先出(LIFO)队列逻辑,适用于任务调度、消息队列等场景。

回复如下内容即可获取对应资料

地址:传送门

例如:

数字 1、表示获取后端开发学习资料

数字 2、表示获取前端开发学习资料

数字 3、表示获取 软考中级设计师资料

数字 4、表示获取后端常用在线免费学习资料

数字 5、计算机毕业设计优秀论文模板

数字 6、前后端分离项目案例源码

数字 7、SSM项目案例源码

数字 8、视频轮播图全部案例源码

数字 9、商城系统项目 前后端分离源码

数字10:商城系统源码 前后端分离项目【毕业设计系统】

数字11:毕业论文答辩PPT模板案例

数字666:前后端项目架构功能讲解【毕设版】

数字6666:毕设常见答辩问题文档【6000+字】

更多。。。

在这里插入图片描述


http://www.mrgr.cn/news/31753.html

相关文章:

  • 低成本出租屋5G CPE解决方案:ZX7981PG/ZX7981PM WIFI6千兆高速网络
  • PyQt入门指南六十 与Python其他库的集成方法
  • 软件设计师-软件工程
  • OpenTelemetry 赋能DevOps流程的可观测性革命
  • 嵌入式硬件实战基础篇(一)-STM32+DAC0832 可调信号发生器-产生方波-三角波-正弦波
  • 【Hadoop】【hdfs】【大数据技术基础】课程 作业四 可视化工具的使用 大数据基础编程、实验和案例教程(第2版)
  • BCT 预估block change tracking file的大小
  • 系统分析与设计
  • 【服务器第二期】mobaxterm软件下载及连接
  • C#中DataGridView 的 CellPainting 事件的e.Handled = true
  • C++速通LeetCode中等第16题-环形链表II(快慢指针)
  • Linux笔记---简单指令
  • 前端框架Vue、React、Angular、Svelte对比
  • 写作练习(一)
  • 2024年华为杯中国研究生数学建模竞赛F题(X射线脉冲星光子到达时间建模)思路
  • 为什么Redis这么快及可以实现的功能
  • 大厂校招:希音(Shein)校园招聘面试题及参考答案
  • JavaEE: 深入探索TCP网络编程的奇妙世界(二)
  • idea中.git文件夹存在但是没有git功能列表
  • 关于CONCAT(‘18‘,FLOOR(RAND()*X);
  • Spring Boot技术在高校心理辅导系统中的应用研究
  • 下一代测试人:T人 or I人!
  • 搜索引擎onesearch3实现解释和升级到Elasticsearch v8系列(三)-文档
  • 【C/C++】速通涉及string类的经典编程题
  • YOLOv9改进,YOLOv9主干网络替换为RepViT (CVPR 2024,清华提出,独家首发),助力涨点
  • 直播音频解决方案