一般消息队列有两种场景
- 生产者消费者模式 :多个生产者生产消息放在消息队列里,多个消费者同时监听消息队列,谁先抢到消息,谁先处理。每个消息只能被消费一次。
- 发布者订阅者模式:发布者发布消息到消息队列里,多个监听者同时监听该消息队列,都会同时收到同一份消息。即每个消息被每个监听者消费一次。
一、构建生产者消费者模式
(1)构建生产者消费者模式,可以使用list去实现
主要使用LPUSH或者RPUSH插入数据,使用LPOP或者RPOP取出数据并且删除。
生产者伪代码为:
string key = "like_list"; string msg = "user_1"; redis.lpush(key,msg);消费者伪代码为:
string key = "like_list"; while(true){ string msg = redis.brpop(BLOCK_TIMEOUT, key ); if (msg == null) continue; processMsg(msg ); }
(2)构建具有优先级的生产者消费者模式,使用sorted sets实现
使用ZADD插入带有SCORE的数据,也就是优先级参数。使用ZREVRANGE 取出数据,并且zrem删除数据,只有在取出成功,并且删除成功的情况下,认为该消息被正确取出。
sorted sets 没有像list中的pop命令一样,取出并删除。
二、构建发布者订阅者模式
使用PUBSUB构建发布者订阅者模式
PUBLISH channel message 往channel中发布消息
SUBSCRIBE channel [channel ...] 客户端订阅某个channgel,可以同时订阅多个channgel
UNSUBSCRIBE [channel [channel ...]] 客户端取消订阅channel
发布者伪代码:
string channel = "order_mq"; string msg = "user_1_1001"; redis.publish(channel,msg);
订阅者伪代码:
string channel = "order_mq"; redis.subscribe(channel); while(true){ redis.onmessage(new MessageListsner(){ public void onMessage(string channel,string msg){ doProcessMsg(msg); } }); }
三、结束语
(1)、基于redis实现的消息系统,不同于activeMQ或者其他同类的消息中间件产品,没有提供持久化等一些特性,所以消息一旦丢失,就不能重现。所在监听者要启动早于生产者。
(2)、基于redis实现的消息系统,也没有提供配置多个任务去同时处理消息,在程序中可以采用线程池,多线程的方式去处理消息。
相关推荐
最近开始在kendynet上开发手游服务端,游戏类型是生存挑战类的,要存储的数据结构和类型都比较简单,于是选择了用redis做存储,数据类型使用string基本就足够了。...4.数据库操作结果通过异步消息返回给调用者
predis-async, 在ReactPHP之上,构建了用于Redis的异步PHP客户端库 PredisAsync 基于( 非阻塞) 客户机库的异步版本的异步客户端库,构建在响应插件之上,用于处理事件事件。 默认情况下,PredisAsync不需要任何附加...
该项目基于Vue作为前端, Flask作为服务端的前后端分离项目, 在项目中使用Mysql作为数据库, Redis作为缓存, 以及容联云作为第三方发送短信验证码(为避免阻塞, 其发送的任务由Celery异步执行), 其次还使用了七牛云作为...
Lettuce 是一个可扩展的线程安全 Redis 客户端,适用于同步、异步和反应式使用。如果多个线程避免阻塞和事务性操作(例如BLPOP和 MULTI/ ) ,则它们可以共享一个连接EXEC。Lettuce是用netty构建的。支持高级 Redis ...
发布/订阅:Redis提供了发布/订阅功能,能够实现消息的异步发布和订阅,适用于实时通知、事件驱动等场景。 分布式支持:Redis提供了分布式部署和数据分片功能,能够构建高可用性、可扩展性的分布式系统。 高性能:...
用户点赞关注后,使用kafka实现异步的发送系统通知 开发环境 构建工具:Apache Maven 集成开发工具: IntelliJ IDEA 2021 数据库:MySQL、Redis 应用服务器:Apache Tomcat 框架:Spring、SpringMVC、Mybatis、...
基于RBAC模型构建权限管理模块,并集成安全框架SpringSecurity,实现用户的认证和授权。 使用Spring Data集成缓存中间件Redis,加快访问速度。 使用Spring Data集成全文搜索搜索引擎ElasticSearch,实现文章信息的...
基于 Springboot + Redis + Kafka 的秒杀系统,乐观锁 + 缓存 + 限流 + 异步,TPS 从 500 优化到 3000.zip 当然可以,以下是一份关于您的Java SpringBoot项目的简介描述: 探索Java的SpringBoot魔法 亲爱的开发者...
Lettuce是可伸缩的线程安全Redis客户端,用于同步,异步和React式使用。 如果多个线程避免阻塞和事务操作(例如BLPOP和MULTI / EXEC则可以共享一个连接。 生菜是用建造的。 支持高级Redis功能,例如Sentinel,群集...
本科毕业设计+python基于flask构建微电影网站,已部署测试(附线上部署过程),增加异步功能,发送弹幕,速率控制等 已经部署到 Linux+mysql+nginx+uwsgi 环境中,下面会有教程 特性 基于蓝图创建红图,更好细分模块与...
红色 用于Scala的非阻塞异步Redis客户端将其添加到您的项目中该项目当前未托管在任何公开可用的Maven存储库中。 但是,您仍然可以通过将其发布到本地存储库中来将其添加到项目中。 运行以下命令: git clone ...
基于SpringBoot微服务构建o2o校园购物微信公众号前后端系统源码+项目说明.zip # o2oSchool ### 系统介绍 校园o2o购物平台融合当下时兴的o2o电商模式即线上对线下的商业模式,同时混合多种元素打造的致力于为校园内...
Rqueue:Redis队列,任务队列,Spring和Spring Boot的延迟队列 Rqueue是基于Redis支持的spring框架的消息传递库,为spring框架构建的异步任务执行器(工作程序)。 它也可以用作消息代理,其中所有服务代码都在...
RedMQ是一个基于Redis的消息传递系统,专门设计用于支持灵活的消息传递方案,它公开了一个API,该API允许通过许多消息属性来过滤消息。 它的核心是基于异步消息协议和Twisted的AMP模块构建的Python TCP服务器。 这...
构建异步任务流,支持常用的串并联,也支持更加复杂的DAG结构。 作为并行计算工具使用。除了网络任务,我们也包含计算任务的调度。所有类型的任务都可以放入同一个流中。 在Linux系统下作为文件异步IO工具使用,性能...
对于程序中耗时任务使用(消费者(celery)+ 中间人(redis)+生产者)来构架简单的异步任务,提高用户体验。
异步python库aio-py-rq 该库由异步Python和Lua脚本集组成,使您能够轻松实现基于Redis的排队系统。 所有队列在多线程环境中均能正常工作。 您唯一需要记住的是,对于多个消费者来说,商品的顺序是无法保留的。 例如...
同时利用页面缓存,url缓存,对象缓存,页面静态化,RocketMQ异步下单,Nginx+lua访问redis提前返回无用请求等一系列措施来提高项目的并发能力,使用ApacheBench(简称ab)对系统进行压测时,以5k的并发度共发出10w个请求,...
4、后端秒杀业务逻辑,基于Redis 或者 Zookeeper 分布式锁,Kafka 或者 Redis 做消息队列,DRDS数据库中间件实现数据的读写分离。 优化思路 1、分流、分流、分流,重要的事情说三遍,再牛逼的机器也抵挡不住高级别的...