Redis队列和阻塞队列

redis实现队列的几种方式(LPUSH/BRPOP,发布/订阅模式,stream) 前面我们在redis学习笔记之基本5种数据结构中提到列表实现队列,我们今天就先从队列开始,经过redis的发布订阅,最后以stream来结尾,来简单说说这三个知识点 队列 redis中通过列表可以来实现队列具体操作可以下面操作 rpush/lpop或lpush/rpop实现简单队列 127.0.0.1:6379> lpush word a b c d (integer) 4 127.0.0.1:6379> llen word (integer) 4 127.0.0.1:6379&g 阅读详情

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

Redis队列 List
在这里插入图片描述

简单演示如下
在这里插入图片描述

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

Redis阻塞队列

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

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

下面是某业务完整的消费者代码
在这里插入图片描述
注意:

  1. 阻塞时间结束后代码会继续向下执行
  2. 如果设置的超时时间太长,这个连接太久没有活跃过,可能会被 Redis Server 判定为无效连接,之后 Redis Server 会强制把这个客户端踢下线。所以,客户端要有处理机制。
    实际项目中redis连接超时时间远大于20s,因此正常情况不会出现redis超时问题。以防万一增加redis异常捕获,出现异常时杀掉当前进程,同时supervisord会自动重新拉起该进程
Redis-消息队列的三种方案(List、Streams、Pub-Sub) 即使是面试跳槽,那也是一个学习的过程。只有全面的复习,才能让我们更好的充实自己,武装自己,为自己的面试之路不再坎坷!今天就给大家分享一个Github上全面的Java面试题大全,就是这份面试大全助我拿下大厂Offer,月薪提至30K!我也是第一时间分享出来给大家,希望可以帮助大家都能去往自己心仪的大厂!为金三银四做准备! 阅读详情

相关推荐

基于 Redis 实现消息队列的深入解析

随着现代分布式系统的广泛应用,消息队列(Message Queue,MQ)作为一种解耦和异步处理的关键技术,扮演着重要角色。消息队列可以用于任务异步处理、服务解耦、流量削峰等多种场景,能够有效提升系统的响应速度和可靠性。在众多消息队列技术中,Redis 凭借其高性能和丰富的数据结构,成为实现消息队列的热门选择之一。本文将深入介绍如何基于 Redis 实现消息队列,并分析其优缺点和应用场景。

fudaihb的博客 1639

Redis消息队列、阻塞队列、延时队列

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

夏寻的博客 3515

测试工程师玩转DeepSeek之Prompt

掌握这些提示词技巧,测试工程师可提升与DeepSeek的协作效率至少3倍。建议结合具体项目上下文进行二次优化,并建立团队内部的提示词知识共享库。✅ “为电商支付接口生成包含幂等性验证的测试用例,覆盖网络中断重试场景”❌ “帮我写测试用例”

weixin_44872675的博客 2262

Redis中阻塞队列和非阻塞队列

阻塞队列是指当队列已满或已空时,对队列进行操作的线程会被阻塞,直到队列有足够的空间或有新的元素进入队列。Redis中实现阻塞队列的命令是BLPOP和BRPOP,它们分别表示从队列头部和尾部取出元素,如果队列为空,则会一直阻塞等待有元素进入队列。阻塞队列会使得对队列进行操作的线程被阻塞,直到队列有足够的空间或有新的元素进入队列;非阻塞队列则直接返回失败或空值。Redis中实现非阻塞队列的命令是LPUSH和RPUSH,它们分别表示向队列头部和尾部插入元素,如果队列已满,则直接返回失败。

qq_39321234的博客 977

手把手教你设计2bit反射型超表面:从单patch扫参到pin管配置全流程

本文提供了一份2bit反射型超表面设计的完整工程实践指南。从单贴片谐振器的参数化扫描与“270度法则”应用,到PIN二极管等效电路模型的获取与集成,再到利用参数化扫描高效仿真四种工作状态,手把手指导读者完成从单元设计到阵列布局、偏置线集成及加工考量的全流程,旨在帮助射频工程师将概念转化为可加工测试的实体模型。

java5的博客 1022

帆软FineBI考试题

Flint 补录表,有批次删除功能。在分析主题内添加数据时能够选择批量添加数据。插件安装过程中有报错提示需要下载 Fine I for Excel 运行环境进行修复,修复完毕后重新安装插件。图例显示支持自定义设置,且图例标题支持隐藏显示。finebi中的指标如果想进行维度区间/真的自定义分组,不能直接拖拽到组建区域中需要先转化为维度方可进行指标分组。excel报表不支持分页。

Davina_yu的博客 1604
上一篇: pgsql:connection failed connection to server at “1“, port 5432 failed “postgres“ P
下一篇: springboot整合modbus实现通讯
普通网友
博客等级 码龄4年 3126粉丝 192原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值