workerman环境下是否有自己实现的队列功能

augushong

workerman环境下是否有自身php实现的队列功能。我想咨询的并不是依赖redis或其他的服务的方案。而是workerman自己实现的一个服务。
我想要的场景也很简单,其实就是redis的list中的push功能和blPop命令。
有一个进程会向队列插入 id,其他的 进程随时消费获取id。不能出现重复分配。

装redis自然是能用,但是有没有人用workerman实现过这个场景的服务吗。

最终想要的效果代码其实很简单:

<?php
namespace app\common\tools;

class MessageListTools 
{

    public const LIST_KEY = 'message_list';

    public static function getRedis()
    {
        ini_set('default_socket_timeout', -1);
        $redis = new \Redis();
        $redis->connect('127.0.0.1', 6379);

        return $redis;
    }

    public static function push($task_id)
    {
        $redis = self::getRedis();
        $redis->lpush(static::LIST_KEY, $task_id);
        return true;
    }

    public static function pop()
    {
        $redis = self::getRedis();
        return $redis->blPop(static::LIST_KEY,0);
    }
}
1005 1 0
1个回答

智佳思远

使用数组可以实现redis的list,但是它是内存变量,重启数据就没了,适合队列里存储不重要可丢失的数据

  • augushong 2023-01-14

    需要多进程,多client。其实就是想要个很小很小的队列server

  • efnic 2023-01-14

    php的标准库里面有个数据结构适合你SplQueue

  • augushong 2023-01-16

    好像挺好的。这样自己只要实现一个小的多进程通信服务就行了。

年代过于久远,无法发表回答
×
🔝