workerman環(huán)境下是否有自身php實(shí)現(xiàn)的隊(duì)列功能。我想咨詢的并不是依賴redis或其他的服務(wù)的方案。而是workerman自己實(shí)現(xiàn)的一個(gè)服務(wù)。
我想要的場(chǎng)景也很簡(jiǎn)單,其實(shí)就是redis的list中的push功能和blPop命令。
有一個(gè)進(jìn)程會(huì)向隊(duì)列插入 id,其他的 進(jìn)程隨時(shí)消費(fèi)獲取id。不能出現(xiàn)重復(fù)分配。
裝redis自然是能用,但是有沒有人用workerman實(shí)現(xiàn)過這個(gè)場(chǎng)景的服務(wù)嗎。
最終想要的效果代碼其實(shí)很簡(jiǎn)單:
<?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);
}
}
使用數(shù)組可以實(shí)現(xiàn)redis的list,但是它是內(nèi)存變量,重啟數(shù)據(jù)就沒了,適合隊(duì)列里存儲(chǔ)不重要可丟失的數(shù)據(jù)