redis實現消息隊列


簡單實現下redis的消息隊列

連接redis數據庫:

class connectRedis
{
    static $redis_port = '6379';
    static $redis_host = '127.0.0.1';

    private function __construct()
    {
    }

    static public $instance;

    static public function getinstance()
    {
        if (!self::$instance) self::$instance = new self();
        try {
            $redis = new Redis();
            $redis->connect(static::$redis_host, static::$redis_port);
        } catch (Exception $e) {
            die('RedisException : Can\'t connect to ' . static::$redis_host . ':' . static::$redis_port);
        }
        return $redis;
    }
}

封裝隊列方法類:

require_once('../connectRedis.php');

class msgQueue
{

    static $redis;

    public function __construct()
    {
        static::$redis = connectRedis::getinstance();
    }

    /*
     * 查看隊列中的當前數據
     * @param $dbname 數據庫
     * @param $key_name key名稱
     * @return array 返回值
     */
    public function selectQueue($dbname, $key_name)
    {
        static::$redis->select($dbname);
        static::$redis->auth('');

        $list = static::$redis->lrange($key_name, 0, -1);
        return $list;
    }

    /*
     * 入隊
     * @param $dbname 數據庫
     * @param $key_name key名稱
     * @param $data 入隊數據
     * @return bool 返回值
     */
    public function inQueue($dbname, $key_name, $data)
    {
        static::$redis->select($dbname);
        static::$redis->auth('');

        $data = json_encode($data);
        $in = static::$redis->lpush($key_name, $data);
        if ($in) return true; else return false;
    }

    /*
     * 出隊
     * @param $dbname 數據庫
     * @param $key_name key名稱
     * @return string 返回值
     */
    public function outQueue($dbname, $key_name)
    {
        static::$redis->select($dbname);
        static::$redis->auth('');

        $value = static::$redis->rpop($key_name);
        $value = json_decode($value, true);
        return $value;
    }

    /*
     * 刪除記錄
     * @param $dbname 數據庫
     * @param $key_name key名稱
     * @return bool 返回值
     */
    public function delQueue($dbname, $key_name)
    {
        static::$redis->select($dbname);
        static::$redis->auth('');

        $res = static::$redis->del($key_name);
        if($res) return true; else return false;
    }

}

test:

require_once('msgQueue.php');
$msgQueue = new msgQueue();
$key_name = 'queue';
$dbname = '1';
$data = ['a','b','c','d','e','f','g','h']; //這里可以是get或post請求過來的數據

//$msgQueue->delQueue($dbname,$key_name);

for($i=0;$i<count($data);$i++){
    $msgQueue->inQueue($dbname,$key_name,$data[$i]);
}

$selectQueue = $msgQueue->selectQueue($dbname,$key_name);
var_dump($selectQueue);

echo '<br>';
var_dump($msgQueue->outQueue($dbname,$key_name));

$selectQueue = $msgQueue->selectQueue($dbname,$key_name);
var_dump($selectQueue);

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM