zoon/requeue

此包已被废弃,不再维护。未建议替代包。

Redis无锁延迟消息队列

1.0.3 2023-05-17 22:31 UTC

This package is auto-updated.

Last update: 2024-03-13 12:42:26 UTC


README

Redis无锁延迟消息队列。

快速开始

安装

composer require zoon/requeue

注意:需要Redis >= 2.2.0

示例

初始化

$redis = new \Redis();
if (!$redis->connect('127.0.0.1')) {
    exit('no connection');
}
$queue = createQueue($redis);

function createQueue(\Redis $connection): \Zoon\ReQueue\Queue {
	$redisAdapter = new \Zoon\ReQueue\RedisAdapter($connection);
	return new \Zoon\ReQueue\Queue($redisAdapter);
}

推送

$queue->push(new \Zoon\ReQueue\Message('id', time() + 3600, 'data'));

更新

$queue->update('id', function (?\Zoon\ReQueue\Message $old) {
	$time = ($old === null ? time() + 3600 : $old->getTimestamp() + 600);
	$data = ($old === null ? 'data' : $old->getData() . '+new');
	return new \Zoon\ReQueue\MessageData($time, $data);
});

计数

printf("count: %d\n", $queue->count());
// count: 1

弹出

$timestampRange = new \Zoon\ReQueue\TimestampRange(null, time() + 3600 + 600);
$message = $queue->pop($timestampRange);
if ($message !== null) {
	printf("id: %s\n", $message->getId());
	printf("timestamp: %d\n", $message->getTimestamp());
	printf("data: %s\n", $message->getData());
}
// id: id
// timestamp: 1575040030
// data: data+new

清除

$queue->clear();