`
haoran_10
  • 浏览: 442593 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

redis(4)、基于redis 构建异步消息系统

阅读更多

redis技术目录

 

一般消息队列有两种场景

  • 生产者消费者模式 :多个生产者生产消息放在消息队列里,多个消费者同时监听消息队列,谁先抢到消息,谁先处理。每个消息只能被消费一次。
  • 发布者订阅者模式:发布者发布消息到消息队列里,多个监听者同时监听该消息队列,都会同时收到同一份消息。即每个消息被每个监听者消费一次。
 
一、构建生产者消费者模式
(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实现的消息系统,也没有提供配置多个任务去同时处理消息,在程序中可以采用线程池,多线程的方式去处理消息。
 
  • 大小: 10.2 KB
分享到:
评论

相关推荐

    微服务SpringBoot整合Redis基于Redis的Stream消息队列实现异步秒杀下单

    【微服务SpringBoot整合Redis基于Redis的Stream消息队列实现异步秒杀下单】这篇文章主要讲解了如何在微服务架构中使用SpringBoot整合Redis来构建一个基于Redis Stream的消息队列,以此来实现实时、高效的异步秒杀...

    Redis延时消息队列基于swoole实现的多进程消费端

    标题中的“Redis延时消息队列基于swoole实现的多进程消费端”是指使用Redis作为消息队列,结合Swoole的多进程特性来构建一个高效、可扩展的延迟消息处理系统。在这个系统中,Redis作为一个可靠的键值存储,用于暂存...

    基于redis实现的消息队列

    标题中的“基于redis实现的消息队列”指的是使用Redis这一开源数据结构存储系统来构建消息队列(Message Queue, MQ)的解决方案。Redis以其高性能、丰富的数据结构和内存存储特性,常被用作构建消息队列的底层技术。...

    基于mq和redis实现的秒杀系统

    总结,基于MQ和Redis的秒杀系统设计旨在提高并发处理能力、保证数据一致性以及优化系统稳定性。通过合理的架构设计和利用这两个技术的优势,可以构建出高效、可靠的秒杀平台。在具体实现时,需要根据业务场景和需求...

    基于Springboot+Mybatis+SpringMvc+springsecrity+Redis完整网站后台管理系统.zip

    在本系统中,Redis可能被用作缓存服务器,提高数据读取速度,减轻数据库压力,同时还可以作为消息队列,实现异步处理,提高系统响应效率。 "boot-security-master"这个文件名可能代表了该项目的主要代码库或者主...

    Redis从入门到精通(九)Redis实战(六)基于Redis队列实现异步秒杀下单 测试项目代码

    通过以上步骤,我们利用Redis构建了一个简单但高效的异步秒杀下单系统。在实际应用中,可能还需要考虑更多细节,如限流、熔断、降级等策略,以确保系统的稳定性和用户体验。在`redis_learning_dzdp`这个压缩包中,...

    Go-Gores-基于Redis的异步作业执行系统

    **Go-Gores: 基于Redis的...总结来说,`Go-Gores`是利用Go语言和Redis构建的高效异步作业执行系统,具备定时调度、高并发处理和扩展性强等特点。通过深入学习和实践,我们可以利用它构建稳定、可靠的后台任务处理系统。

    基于redis实现高并发异步秒杀点评项目

    在本项目中,我们将探讨如何基于Redis实现一个高并发、异步的秒杀系统,以确保在流量高峰期能够稳定运行,避免传统数据库可能出现的性能瓶颈。 **一、Redis介绍** Redis是一个开源的内存数据结构存储系统,它可以...

    Go-Delayer-基于Redis的延迟消息队列中间件

    本文将深入探讨一个名为“Go-Delayer”的延迟消息队列中间件,它基于Redis构建,并且由Golang开发,同时支持PHP、Golang等多种语言的客户端接口,为开发者提供了一种高效、灵活的延迟任务处理方案。 首先,我们来...

    redis做消息队列

    消息队列是分布式系统中的一种中间件,它允许不同组件之间异步通信,提高了系统的响应速度和处理能力。在本场景中,Redis作为消息队列使用,替代了传统的Kafka队列,以实现顺序消费和防止高并发时的内存溢出问题。 ...

    mqtt+springBoot+redis消息处理,

    本项目将这三者结合,实现了一个基于MQTT的设备消息处理系统,通过Spring Boot进行服务端的管理和控制,并利用Redis存储和分发消息。 首先,让我们详细了解一下MQTT协议。MQTT设计的目标是低带宽、高延迟和不可靠...

    Python-aredis一个高效和用户友好的异步Redis客户端

    **Python-aredis:高效与用户友好的异步Redis客户端** `aredis` 是一个针对 Python 3.5 及以上版本设计的高效、异步的 Redis 客户端库。它利用了 Python 的协程(coroutines)和事件循环(event loop)技术,为...

    C# Redis发布订阅Demo

    通过这个Demo,开发者可以学习到如何在C#应用中利用Redis进行实时数据通信和监控,这对于构建分布式系统和实时应用非常有价值。在实际项目中,可以根据需求进一步优化和扩展这些基础功能,比如错误处理、多线程支持...

    Thinkphp6 redis队列 消息事件 gatewayworker聊天打通版

    总的来说,通过`Thinkphp6`、`Redis`、`GatewayWorker`以及队列的结合,我们可以构建出一个高性能、实时交互的聊天系统。这种架构不仅能够提供流畅的用户体验,还具备良好的扩展性和可靠性,是现代Web应用开发中的...

    基于 SpringBoot+Mybatis+Redis+RabbitMQ 秒杀系统.zip

    在这个基于 SpringBoot+Mybatis+Redis+RabbitMQ 的秒杀系统中,我们将探讨这四个核心技术在构建高并发、高性能的秒杀场景下的应用。 1. **SpringBoot**: SpringBoot 是由 Pivotal 团队提供的全新框架,其目标是...

    利用redis rightPop 和 redis stream 实现消息队列

    Redis Stream还提供了其他高级特性,如流的限流(通过`XLEN`和`XRANGE`命令)、消息过期策略(通过`XEXPIRE`命令)以及基于ID的查询和回溯,这使得它成为构建消息队列和事件驱动架构的理想选择。 在提供的`redis-...

    Go-基于golang和redis实现的简单易用的队列

    本文将深入探讨如何使用Golang(Go语言)与Redis构建一个简单易用的消息队列系统,以此来提升系统的可扩展性和解耦性。 首先,我们来看标题"Go-基于golang和redis实现的简单易用的队列",这表明我们将使用Go语言...

Global site tag (gtag.js) - Google Analytics