我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Redis-异步消息

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Redis-异步消息

Redis-异步消息

关于异步消息,大家都知道,如下:

 

  这些用起来都是比较复杂的,RabbitMQ先要创建Exchange,在创建Queue,还要将Queue和Exchange通过某种规则绑定起来。发消息之前要指定routing-Key,还要控制头部信息。

  即使你只需要一组消息者。那么你就要经历上面繁琐的过程。

  但是Redis对于那些轻量级和只有一组消息者的消息队列;

  Redis的list数据结构常用来作为异步消息队列来使用。使用rpush/lpush操作入队列,用lpop/rpop来出队列。我们都知道list是一个链表,所以操作方式如下

 

 

 当然我们会遇到一些问题,比如队列空了会怎么样?客户端是通过队列的 pop 操作来获取消息,然后进行处理。处理完了再接着获取消息,再进行处理。如此循环往复,这便是作为队列消费者的客户端的生命周期。 可是如果队列空了,客户端就会陷入 pop 的死循环,不停地 pop,没有数据,接着再 pop,又没有数据。这就是浪费生命的空轮询。空轮询不但拉高了客户端的 CPU,redis 的 QPS 也会被拉高,如果这样空轮询的客户端有几十来个,Redis 的慢查询可能会显著增多。 通常我们使用 sleep 来解决这个问题,让线程睡一会,睡个 1s 钟就可以了。不但客户端的 CPU 能降下来,Redis 的 QPS 也降下来了。(摘自Redis深度历险) 

 睡眠会导致消息的延迟增大·,多个消费者情况下,延迟会有所下降,因为每个消费者都是的睡眠时间是岔开来的。通过阻塞读:blocking,也就是这两个命令:blpop,brpop。

当然还有会空闲连接自动断开,顾名思义,一直阻塞,Redis客户端就成了闲置的,时间长了,服务器会断开连接,减少闲置资源,这时候就会抛出异常,所以编写消费者的时候,注意捕获异常,重试。

延时队列:

这种方式比较适合异步消息处理,将当前冲突的请求扔到另一个队列延后处理以避开冲突

我们将消息序列化成一个字符串作为 zset 的 value,这个消息的到期处理时间作为 score,然后用多个线程轮询 zset 获取到期的任务进行处理,多个线程是为了保障可用性,万一挂了一个线程还有其它线程可以继续处理。因为有多个线程,所以需要考虑并发争抢任务,确保任务不能被多次执行。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Redis-异步消息

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Redis-异步消息

关于异步消息,大家都知道,如下:   这些用起来都是比较复杂的,RabbitMQ先要创建Exchange,在创建Queue,还要将Queue和Exchange通过某种规则绑定起来。发消息之前要指定routing-Key,还要控制头部信息。  即使你只需要一组消
Redis-异步消息
2017-05-19

Handler详解MessageQueue和异步消息

Handler是Android中一个非常重要的类,它主要用于处理Message对象并执行相应的操作。而MessageQueue是Handler的一个重要成员变量,用于存储消息队列。异步消息则是Handler处理的一种机制。MessageQu
2023-09-15

python使用redis实现消息队列(异步)的实现完整例程

目录安装相关库消息队列实现及使用创建配置文件代码实现最近在用fastapi框架开发web后端,由于近几年python异步编程大火,fastapi凭借高性能也火了起来。本篇介绍了在异步环境下实现Redis消息队列的方法,代码可以直接拷贝到fa
2023-01-18

Android handler异步消息机制是什么

Android中的Handler是一种基于消息机制的异步处理机制。它可以用来将消息或Runnable对象发送到主线程或者后台线程中执行。在Android中,UI操作必须在主线程中执行,否则会出现异常。如果在后台线程中执行耗时操作,就需要使用
2023-10-18

android异步消息处理机制是什么

Android异步消息处理机制是一种在主线程以外的线程中执行任务的机制。它主要包括以下几个重要的组件:1. Handler:负责发送和处理消息,它可以与Looper关联,通过Looper从消息队列中获取消息并处理。2. Message:消息
2023-09-13

swoole异步群发模板消息的示例

这篇文章主要介绍swoole异步群发模板消息的示例,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、用的是TP5.1的框架,swoole分成一个客户端发送接收消息,一个服务器负责处理信息  服务端代码,服务器要先安装
2023-06-14

RocketMQ发送同步、异步、单向、延迟、批量、顺序、批量消息、带标签消息

RocketMQ的这几种消息发送方式,各有千秋,选择哪种方式,得看你的具体需求和场景。同步发送最靠谱,但最慢;异步发送和单向发送快,但可靠性差;延迟发送可以定时发送消息;批量发送能提高效率;顺序发送能保证消息顺序;带标签消息方便过滤和查找。

异步Rust:构建实时消息代理服务器

我们已经探索了在Rust中创建一个简单的消息代理,并使用WebSocket客户端对其进行测试。这个例子突出了Rust在构建高效、并发的网络应用程序方面的能力。

PHP实现异步定时多任务消息推送

在PHP中实现异步定时多任务消息推送的方式有多种,其中一种常用的方式是使用异步任务队列,这篇文章主要介绍了这一方法的具体实现,需要的可以参考一下
2023-05-15

php异步消息队列中间件怎么应用

PHP异步消息队列中间件可以应用于以下场景:异步任务处理:当某些任务需要在后台处理,并且执行时间较长时,可以将任务放入消息队列中,PHP代码只需发送消息到队列中即可,然后可以立即返回给用户,由后台的消费者进程来处理任务。实时消息推送:当系统
2023-10-23

Apache Kafka:为“无缝系统”提供异步消息支持

Apache Kafka 是最流行的开源消息代理之一。它已经成为了大数据操作的重要组成部分,你能够在几乎所有的微服务环境中找到它。本文对 Apache Kafka 进行了简要介绍,并提供了一个案例来展示它的使用方式。
开源2024-12-13

redis中的消息队列

这期内容当中的小编将会给大家带来有关redis中的消息队列介绍,以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、认识消息队列1.1 消息队列概念“消息”是在两台计算机间传送的数据单位。消息可以非常简单,例如只包含文本字
2022-11-30

PHP怎么实现异步定时多任务消息推送

这篇“PHP怎么实现异步定时多任务消息推送”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“PHP怎么实现异步定时多任务消息推送
2023-07-06

怎样实现Errai 2.0中的异步消息传递框架

怎样实现Errai 2.0中的异步消息传递框架,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Errai是JBoss开发的一个基于GWT的框架,使用下一代WEB技术,用于构建富客
2023-06-17

如何使用AQ实现异步消息传递和处理

要使用AQ(Advanced Queuing)实现异步消息传递和处理,首先需要在Oracle数据库中创建一个队列和一个相关联的队列表。然后,可以将消息放入队列中,并编写PL/SQL过程来处理这些消息。下面是使用AQ实现异步消息传递和处理的
如何使用AQ实现异步消息传递和处理
2024-03-02

Redis入门(5) - 消息通知

使用列表实现任务队列优先级队列按照规则订阅Redis也可以作为任务队列。任务队列顾名思义,就是“传递任务的队列”。任务队列与消息队列什么区别呢?任务队列是逻辑模型,而消息队列是通信模型,两者是不同层次的抽象,用消息队列可以实现任务队列。与任务队列进行交互的实体
Redis入门(5) - 消息通知
2016-07-22

编程热搜

目录