Redis队列和阻塞队列

📅 发布时间:2026/7/6 18:00:00 👁️ 浏览次数:
Redis队列和阻塞队列
redis 队列的优点是轻量级业务足够简单时不需要使用rabbitMq这样专业的消息中间件缺点是弹出队列中的元素时即使该消息处理失败也无法再次进行消费Redis队列 List简单演示如下普通的redis队列为了实现业务通常会使用while进行循环这样的话没有消息时依旧会频繁的执行循环造成cpu的空转所以一般会在代码中增加sleep来解决该问题但因此又会造成消息延迟问题。阻塞队列可以很好的解决这些问题。Redis阻塞队列redis队列提供了 “阻塞式” 拉取消息的命令BRPOP / BLPOP这里的 B 指的是阻塞Block。如果队列为空消费者在拉取消息时就「阻塞等待」一旦有新消息过来就通知消费者立即处理新消息。阻塞队列实现使用 BRPOP 这种阻塞式方式拉取消息时还支持传入一个「超时时间」如果设置为 0则表示不设置超时直到有新消息才返回否则会在指定的超时时间后返回 NULL下面是某业务完整的消费者代码注意阻塞时间结束后代码会继续向下执行如果设置的超时时间太长这个连接太久没有活跃过可能会被 Redis Server 判定为无效连接之后 Redis Server 会强制把这个客户端踢下线。所以客户端要有处理机制。实际项目中redis连接超时时间远大于20s因此正常情况不会出现redis超时问题。以防万一增加redis异常捕获出现异常时杀掉当前进程同时supervisord会自动重新拉起该进程