redis延时队列实现

对于可靠性要求不高的延时队列消息 可以采用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());

            //业务处理 如果为了提高效率 可以加入订阅模式  异步处理

        }

    });

});

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容