欢迎来到站圈网!

java numpy线性方程组KEY_Oc36cfac82e3python线性插值pygameselenium

投稿中心

Redis

当前位置: 主页 > 数据库 > Redis

Redis队列和阻塞队列的实现

时间:2023-11-11|作者:|点击:

redis 队列的优点是轻量级,业务足够简单时不需要使用rabbitMq这样专业的消息中间件;缺点是弹出队列中的元素时,即使该消息处理失败也无法再次进行消费

Redis队列 List

Redis队列和阻塞队列的实现

简单演示如下

Redis队列和阻塞队列的实现

普通的redis队列,为了实现业务,通常会使用while进行循环,这样的话没有消息时依旧会频繁的执行循环,造成cpu的空转,所以一般会在代码中增加sleep来解决该问题,但因此又会造成消息延迟问题。

Redis队列和阻塞队列的实现

阻塞队列可以很好的解决这些问题。

Redis阻塞队列

redis队列提供了 “阻塞式” 拉取消息的命令:BRPOP / BLPOP,这里的 B 指的是阻塞(block)。如果队列为空,消费者在拉取消息时就「阻塞等待」,一旦有新消息过来,就通知消费者立即处理新消息。

Redis队列和阻塞队列的实现

阻塞队列实现:

Redis队列和阻塞队列的实现

使用 BRPOP 这种阻塞式方式拉取消息时,还支持传入一个「超时时间」,如果设置为 0,则表示不设置超时,直到有新消息才返回,否则会在指定的超时时间后返回 NULL

下面是某业务完整的消费者代码

Redis队列和阻塞队列的实现

注意:

  1. 阻塞时间结束后代码会继续向下执行
  2. 如果设置的超时时间太长,这个连接太久没有活跃过,可能会被 Redis Server 判定为无效连接,之后 Redis Server 会强制把这个客户端踢下线。所以,客户端要有处理机制。实际项目中redis连接超时时间远大于20s,因此正常情况不会出现redis超时问题。以防万一增加redis异常捕获,出现异常时杀掉当前进程,同时supervisord会自动重新拉起该进程

 到此这篇关于Redis队列和阻塞队列的实现的文章就介绍到这了,更多相关Redis队列和阻塞队列内容请搜索站圈网(www.zhano.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.zhano.cn)!

版权声明:本文内容由小编收集网络,均来自网络用户自发贡献,版权归原作者所有,Web前端、电脑编程学习类网站不拥有其著作权,亦不承担相应法律责任。具体规则请查看《Web前端、电脑编程学习类网站用户服务协议》和《Web前端、电脑编程学习类网站知识产权保护指引》。如果您发现本站中有涉嫌抄袭的内容,填写联系本站管理员,一经查实,管理员将立刻删除涉嫌侵权内容。

上一篇:Redis从单点到集群部署模式(单机模式 主从模式 哨兵模式

下一篇:Redis哨兵监控的使用

本文标题:Redis队列和阻塞队列的实现

本文地址:https://www.zhano.cn/Redis/70764.html

AD300

广告投放 | 联系我们 | 版权申明 | SiteMap

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:15234109 | 邮箱:15234109#qq.com(#换成@)

Copyright © 2019-2023 豫ICP备19001789号