Redis消息队列:RPOPLPUSH vs Pub/Sub

介绍

Redis以内存数据库而闻名。但是,某些系统将它用作消息队列管理工具。
Pub/Sub 和 RPOPLPUSH 是用于实现这样一个系统的两组命令。在这篇文章中,我将分享一些关于这两个命令集的知识,它们的用例以及优缺点。

PUBLISH/SUBSCRIBE

假设 Pub/Sub 就像一个无线电台,所有订阅队列的使用者都将接收发布到该队列的所有消息。

它是如何工作的

消费者 C1、C2、C3 订阅队列 q
生产者 P 将消息m发布到队列 q
队列 q 向所有消费者 C1、C2、C3 发送消息

例子

群聊系统是这种消息队列类型的典型例子,其中用户向一个组发送消息,所有其他组成员都需要接收该消息。Pub/Sub 是一个很好的工具,可以确保消息传递给所有订阅者。

什么时候不使用

由于内存缓冲区的效率,如果消费者失去了与队列的连接,那么消费者很有可能在连接丢失时丢失消息。Redis服务器决定清除消息缓冲区,为下一个传入的消息节省更多的内存。

RPOPLPUSH

RPOPLPUSH(可靠队列模式)的工作方式不同。消息队列管理的实现来自客户机,而不是Redis服务器。

它是如何工作的

队列 q 是 Redis 中的一个列表。
生产者 P LPUSH 消息 m1, m2, m3 到列表 q。
消费者 C1 通过使用命令 RPOPLPUSH 从列表 q 中弹出消息 m1 来消费来自列表 q 的消息,同时将该消息推送到另一个工作列表 q-c1-working。
如果 C1 成功使用 m1,它会将消息 m1 从工作列表 q-c1-working 中删除。
如果 C1 未能使用该消息,根据业务逻辑,它将:消息 m1 重新排队到原始队列 q 或者拒绝消息 m1,将其移动到拒绝队列 q-rejected。
消费者 C2、C3 依次处理与 C1 相同的流中的消息,但处理的消息不同。只有一个使用者成功地使用了一个特定的消息。

例子

这种机制在一个消息被一个且只有一个消费者成功消费的情况下非常有用。

什么时候不使用

此过程至少创建 3 个队列:主队列、工作队列、拒绝队列。此外,每个消费者都有自己的工作队列。当查看队列列表时,有点错综复杂。

欢迎关注我的公众号:曲翎风,获得独家整理的学习资源和日常干货推送。
如果您对我的专题内容感兴趣,也可以关注我的博客:blog.qulingfeng.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智能图书调度系统是一个复杂的系统,它需要实现图书的检索、借阅、归还等功能。基于Pub/Sub的系统设计可以让系统更加稳定和可扩展。以下是一个基于Pub/Sub的智能图书调度系统的系统设计: 1. 系统架构 智能图书调度系统主要由以下几个模块组成: - 图书管理模块:实现图书的检索、借阅和归还等功能。 - 用户管理模块:实现用户的注册、登录和权限管理等功能。 - 消息队列模块:用于实现消息的异步传输和解耦。 - 分布式缓存模块:用于缓存数据,提高系统的响应速度和并发能力。 - 数据库模块:用于存储系统的数据。 2. 技术栈 智能图书调度系统采用以下技术栈: - 消息队列:使用Google Cloud Pub/Sub作为消息队列。 - 缓存:使用Redis作为分布式缓存。 - 数据库:使用MySQL作为关系型数据库。 - 后端框架:使用Spring Boot作为后端框架。 - 前端框架:使用React作为前端框架。 - 云平台:使用Google Cloud Platform作为云平台。 3. 系统流程 智能图书调度系统的流程如下: - 用户登录系统,系统验证用户的身份。 - 用户搜索图书,系统根据用户的搜索条件从数据库中检索图书。 - 用户借阅图书,系统从数据库中检索图书信息,将借阅信息写入消息队列。 - 图书管理员接收到借阅信息,根据借阅信息从数据库中修改图书状态。 - 用户归还图书,系统从数据库中检索图书信息,将归还信息写入消息队列。 - 图书管理员接收到归还信息,根据归还信息从数据库中修改图书状态。 4. Pub/Sub架构设计 智能图书调度系统使用Pub/Sub架构进行消息的传输和解耦。系统的Pub/Sub架构如下: - 消息发布者:用户借阅或归还图书时,将消息发送到Pub/Sub主题。 - 消息订阅者:图书管理员通过订阅主题接收消息,根据消息内容对图书状态进行修改。 5. 缓存架构设计 智能图书调度系统使用Redis作为分布式缓存,缓存的数据包括: - 用户信息:用户的登录状态、权限等信息。 - 图书信息:图书的基本信息和状态信息。 6. 数据库设计 智能图书调度系统使用MySQL作为关系型数据库,数据库的设计如下: - 用户表:存储用户的基本信息和权限信息。 - 图书表:存储图书的基本信息和状态信息。 - 借阅表:存储用户的借阅记录。 - 归还表:存储用户的归还记录。 7. 总结 基于Pub/Sub的智能图书调度系统的系统设计可以提高系统的可扩展性和稳定性,可以将系统的各个模块进行解耦,提高系统的响应速度和并发能力。同时,使用分布式缓存和关系型数据库可以提高系统的性能和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值