总线 主频 集成电路 CPU 芯片 微架构
主页 正文

Redis延时队列实现与应用技巧

redis应用 2:延时队列

我们通常倾向于将RabbitMQ和Skull用作调解人程序,以在应用程序之间获得异步消息。
但是,这两个中等设备具有丰富的功能,并且可以超出许多人的理解。
熟悉RabbitMQ的朋友知道其功能很复杂。
在发送消息之前,您必须创建一个交换和队列,并通过规则将它们连接起来。
同时,应指定路线和控制头信息。
客户还需要在食用新闻之前进行类似的繁琐过程。
尽管在大多数情况下,我们的消息顺序只有一组客户,但我们仍然必须经过这些步骤。
Redis的外表可以轻松解决此问题。
对于仅与一组客户的一系列消息,可以使用Redis轻松实现。
REDIS消息的顺序不是消息的专业队列,不能保证消息的可靠性。
REDIS列表(列表)数据结构通常用于异步消息的等级。
使用RPUSH/LPUSH操作进入队列,并使用LPOP和RPOP在队列中设置。
客户通过POP操作收到消息。
处理完成后,将再次获取该消息以进行处理,依此类推。
这是客户作为消费者的生命周期。
但是,如果转弯为空,客户将属于无尽的流行循环,并继续尝试接收消息。
这不仅会消耗资源,而且还会导致使用客户的CPU和RDIS的CPU。
通常,我们可以通过睡觉来解决这个问题。
让线程休息1秒,以减少CPU和RRIS的CSP的使用。
但是,这种方法导致消息延迟增加。
如果有很多客户,此延迟将减少。
但是,更好的解决方案是使用BLPOP/BRPOP。
这两个指令的前缀B字符表示阻塞(阻塞读数)。
当回合没有数据时,他们会立即入睡。
数据到达后,立即醒来。
使用BLPOP/BRPOP代替LPOP/RPOP可以完美解决此问题。
但是,这不是一个完美的解决方案。
如果连接保持阻塞,则客户连接REDIS将成为不活动的连接,并且服务器可以主动断开连接以减少工作中资源的使用。
目前,BLPOP/BRPOP将异常。
因此,在从客户端撰写客户时,您需要谨慎地捕获异常,然后重试。
在最新课程中,我们提出了分布式锁的问题,但是我们没有提及客户在处理请求时无法阻止的情况。
通常有三种策略来处理阻塞故障:直接抛出异常,睡觉和队列延误。
延迟的顺序可以通过REDIS ZSET(列出)实现。
我们将消息以字符串作为ZSET的值提供,并因此使用消息处理时间,然后使用多个纱线调查Zetset以获取过期的处理任务。
ZREM REDIS方法是多线程竞争和许多任务过程的关键。
通过ZREM确定唯一的所有者。
同时,确保捕获handing_msg豁免以避免异常周期退出由于个别任务处理问题。
为了优化这个逻辑,你可以考虑使用luascripting对zrangebyscore和zrem一起执行原子操作,以避免多个进程竞争任务时的损失。

redis怎么做消息队列

有两种方式:

Redis自带的Pub/Sub机制,即发布模式。
产品(生产者)和消费者的模式是1m,它会被很多消费者消费。
对于主题场景。
首先,数据的可靠性无法保证。
损失一定是难以承受的。
其次,扩张缺乏弹性,无法通过增加更多消费者来加速消费进程。
解决方案。
该方案比较适合数据可靠性要求不高的情况,比如一些统计记录。

Redis Push/POP 机制,Redis 列表数据结构列表(lists)。
最好的使用方式是生产者消息LPUSH,消费者BRPOP消息,超时时间来减少redis压力。
与第一种方案相比,该方案在数据可靠性上有所提高,并且通过多个客户端也可以提高消费速度。
但与专业的消息队列相比,该方案的状态非常简单(无状态),并且没有ACK机制。
等候名单。

热门资讯
arm汇编指令集手册
如何删除已玩游戏记录
芯片价格一览表
机械硬盘一直不用的寿命
什么是主频?深度解析计算机核心频率知识
组态王485通讯连接电力仪表及PLC变频器实现指南
运算器包括哪两种运算形式
x86指令集一共多少条