对于可靠性要求不高的延时队列消息 可以采用redis有序集合进行延时发送
首先通过zAdd添加数据 把score设置成过期时间time()
\EasySwoole\RedisPool\RedisPool::invoke(function (\EasySwoole\Redis\Redis $redis) {
$data = $redis->zAdd("yanshi", time(), "zhixing");
});
再通过常驻内存运行或者es里面运行自定义进程 在代码里面定时执行获取超时时间的score
\EasySwoole\Component\Timer::getInstance()->loop(10 * 1000, function () {
\EasySwoole\RedisPool\RedisPool::invoke(function (\EasySwoole\Redis\Redis $redis) {
$data = $redis->zRangeByScore("yanshi", 0, time(), ['withScores' => true, 'limit' => array(0, 1)]);
var_dump($data);
if(!empty($data)) {
$redis->zRemRangeByScore("yanshi", 0, time());
//业务处理 如果为了提高效率 可以加入订阅模式 异步处理
}
});
});