movisio / redis-queue
此包的最新版本(v1.0)没有可用的许可证信息。
简单的Redis消息队列
v1.0
2021-11-25 11:47 UTC
Requires
- kdyby/redis: *
This package is auto-updated.
Last update: 2024-09-25 17:56:19 UTC
README
这是一个使用Redis列表和kdyby/redis帮助实现的简单队列实现。
安装
使用composer安装
composer require movisio/redis-queue
Nette服务配置
将以下内容添加到config.neon中
services: - Movisio\RedisQueue\Factory
对于更复杂的设置,如目录或目录:子目录,请使用
services: RedisQueue: factory: Movisio\RedisQueue\Factory setup: - setNamespace("MyQueues") # directory - setNamespace("Directory:%redisNamespace%") # subdirectory from parameter
用法
首先,创建工厂。如果你使用Nette服务,则跳过此步骤。
/** @var \Kdyby\Redis\RedisClient $redisClient */ $factory = new \Movisio\RedisQueue\Factory($redisClient); $factory->setNamespace("Queues:MyCustomQueues"); # optional
如果使用Nette服务,请注入Factory
class MyPresenter { /** @var \Movisio\RedisQueue\Factory @inject */ public \Movisio\RedisQueue\Factory $queueFactory; }
然后创建队列并将消息push()
到其中。返回值是队列的新长度。
$queue = $this->queueFactory->get("QueueName"); $queueLength = $queue->push("TestMessage");
要从队列中读取,你可以使用wait()
方法,该方法将移除并返回队列中的第一个值,或者直到有一个可用的值为止。参数是秒数,默认为30。
while (true) { $message = $queue->wait(30); // wait 30 seconds if (is_null($message)) { echo "queue is empty"; continue; // or some fallback load from database } echo "found message: " . $message; }
如果你只想检查队列是否为空而不等待超时,请使用pop()
方法,它将移除并返回队列中的第一个值。
$message = $queue->pop(); if (is_null($message)) { echo "Queue is empty"; }