easy-queue/easy-queue

easy-queue, simple redis queue

v1.0 2020-10-25 10:36 UTC

This package is not auto-updated.

Last update: 2024-05-25 07:38:07 UTC


README

EasyQueue简单易用PHP-Redis队列,支持延迟队列

队列介绍

基于Redis有序集合实现的Redis延迟队列,添加/删除/查找的复杂度都是 O(1),每个队列中可存储40多亿元素。

环境依赖

"php": ">=5.4"
"ext-redis": ">=2.0"

Composer安装

  composer require easy-queue/easy-queue

【A】. 快速入门->生产者
//1.加载Redis
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

//2.设置队列
$queue = new \EasyQueue\Queue($redis);

//3.投递队列
$name = 'order'; //队列名称
$time = time() + 120; //下单成功30秒需要处理
$orderId = uniqid();
if ($queue->add($name, $orderId, $time))
{
    echo 'success' . PHP_EOL;
}
else
{
    echo 'failed' . PHP_EOL;
}

【B】. 快速入门->消费者
//1.加载Redis
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

//2.设置队列
$queue = new \EasyQueue\Queue($redis);

//3.消费队列
$name = 'order';
$res = $queue->get($name);
if ($res)
{
    var_dump($res);
}

【C】. 快速入门->其他操作
(1).在队列中查询time<=1603597141 and time>=0 的元素(同时队列中会自动删除符合条件的元素)
$time = 1603597141;
$list = DelayQueue::get($time);

(2).在队列中查询time<=1603597141 and time>=1603597132 的元素(同时队列中会自动删除符合条件的元素)
$time1 = 1603597413;
$time2 = 1603597132;
$list = DelayQueue::get($time1, $time2);

(3).在队列中查询time<=1603597141 and time>=1603597132 的元素,只返回1条(同时队列中会自动删除这条元素)
$time1 = 1603597555;
$time2 = 1603597132;
$list = DelayQueue::get($time1, $time2,1);

(4).在队列中查询time<=1603597141 and time>=1603597132 的元素返回10条即可,不删除队列数据,仅查看数据
$time1 = 1603597693;
$time2 = 1603597132;
$list = DelayQueue::get($time1, $time2, 10, false);

【D】. 快速入门->元素重复
Redis有序集合中元素内容不得重复,上面实例中都是传递的订单Id,如果我们想投递多次相同订单Id,何如?
(1).Value中传递唯一Id,同订单Id组合的Json形式,例如
$data = [
    'order_id'=>1,
    'order_uniqid'=>uniqid()
];
$res =  DelayQueue::add(time() + 30, json_encode($data));
(2).Value中前X位存储订单Id,后X位存储唯一Id(推荐)

【E】. Bug反馈
请反馈至QQ392223903,感谢持续反馈!