Laravel中blpop队列操作为何不普遍采用,其原理和适用场景有何不同?

2026-04-02 20:020阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计922个文字,预计阅读时间需要4分钟。

Laravel中blpop队列操作为何不普遍采用,其原理和适用场景有何不同?

前言:Redis 的 list 数据结构常用作消息队列,常用命令有 lpop/rpop 等,还有带阻塞版本的 blpop/brpop 等。Laravel 5.3 消息队列也使用 lpop 取消息,为何不用 blpop 呢?blpop 不用。

前言

Redis 的 list 数据结构常用来做消息队列,通常使用的命令有 lpop/rpop ,还有带阻塞版的 blpop/brpop 等。Laravel 5.3 消息队列也是用的 lpop 取消息,为什么不用阻塞版的 blpop 呢?

blpop 不用一直轮询,还可以同时取多个队列,blpop high low 30,更方便实现队列的优先级。

安全队列和不安全队列

什么是不安全的队列?比如客户端 lpop(统一以 lpop 为例) 从 redis 取出来的 job(任务)还没处理完进程挂掉了或者遇到了异常,由于此时服务器上已经没有副本了,这个 job 就丢失了。这种队列就是不安全的。

Laravel 正是为了保证消息队列的可靠,进程挂掉了或者处理失败还可以重试等,做了比较完善的机制,如取队列的同时把队列放入另一个集合中“暂存”起来。如代码所示,使用 lpop 取出队列,同时 zadd 到另一个集合,使用 redis lua 来保证原子性。

阅读全文

本文共计922个文字,预计阅读时间需要4分钟。

Laravel中blpop队列操作为何不普遍采用,其原理和适用场景有何不同?

前言:Redis 的 list 数据结构常用作消息队列,常用命令有 lpop/rpop 等,还有带阻塞版本的 blpop/brpop 等。Laravel 5.3 消息队列也使用 lpop 取消息,为何不用 blpop 呢?blpop 不用。

前言

Redis 的 list 数据结构常用来做消息队列,通常使用的命令有 lpop/rpop ,还有带阻塞版的 blpop/brpop 等。Laravel 5.3 消息队列也是用的 lpop 取消息,为什么不用阻塞版的 blpop 呢?

blpop 不用一直轮询,还可以同时取多个队列,blpop high low 30,更方便实现队列的优先级。

安全队列和不安全队列

什么是不安全的队列?比如客户端 lpop(统一以 lpop 为例) 从 redis 取出来的 job(任务)还没处理完进程挂掉了或者遇到了异常,由于此时服务器上已经没有副本了,这个 job 就丢失了。这种队列就是不安全的。

Laravel 正是为了保证消息队列的可靠,进程挂掉了或者处理失败还可以重试等,做了比较完善的机制,如取队列的同时把队列放入另一个集合中“暂存”起来。如代码所示,使用 lpop 取出队列,同时 zadd 到另一个集合,使用 redis lua 来保证原子性。

阅读全文