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+字】
更多。。。