Laravel 4队列

Ben*_*lah 9 php laravel laravel-4

我一直在Laravel 4中使用Queue系统,效果很好! - 我想知道是否有办法查看Queue中的实际内容?我正在使用redis作为后端.

Lau*_*nce 23

我花了一些时间来挖掘Queue驱动程序和API.我能找到你的答案.

Short TL; DR版本:

Queue::getList()Queue接口上没有本机(或类似)功能.

但是这将为您提供defaultRedis队列中等待处理的所有排队作业的列表:

$list = (Queue::getRedis()->command('LRANGE',['queues:default', '0', '-1']));
Run Code Online (Sandbox Code Playgroud)

default如果您运行多个队列管,请更改为其他名称.

请注意,该命令可能会导致返回一个非常大的数据集(就像转储数据库的一部分一样) - 所以您可能只想获得排队的作业数量:

 $queue_length = (Queue::getRedis()->command('LLEN',['queues:default']));
Run Code Online (Sandbox Code Playgroud)

更长的版本:

Queue::getList()Queue接口上没有本机(或类似)功能.但我注意到可以从Queue界面获取Redis驱动程序:

$redis = Queue::getRedis();
Run Code Online (Sandbox Code Playgroud)

深入研究Redis驱动程序 - 我们可以看到有一个名为的函数command().这被定义为

command(string $method, array $parameters = array()) 
Run a command against the Redis database.
Run Code Online (Sandbox Code Playgroud)

这意味着我们现在可以通过Laravel将任何本机Redis命令运行到Redis实例上.

这里列出了Redis命令的完整列表

通过浏览该列表 - 我们有许多有用的命令可供队列使用.

首先 - 您可以查看所有KEYS可用的内容 - 如果您不确定队列的名称,这可能很有用:

$keys = Queue::getRedis()->command('KEYS',['*']);
Run Code Online (Sandbox Code Playgroud)

您还可以在运行其他操作之前确保存在特定的KEY - 如下所示:

if (Queue::getRedis()->command('EXISTS',['queues:default']))
{
    // Queues:default key exists!
}
Run Code Online (Sandbox Code Playgroud)

此外 - 您可以获得队列的长度 - 这很有用

 $queue_length = (Queue::getRedis()->command('LLEN',['queues:default']));
Run Code Online (Sandbox Code Playgroud)

最后,您可以使用此获取整个队列列表

 $list = (Queue::getRedis()->command('LRANGE',['queues:default1', '0', '-1']));
Run Code Online (Sandbox Code Playgroud)

如果你不想要完整列表(也许你的队列非常大) - 你可以得到它的一个子集.阅读Redis文档中的更多LRANGE.