<?php

namespace app\controller;

use app\BaseController;
use think\facade\Request;

/**
 * redis消息队列
 * Class RedisQuery
 * @package app\controller
 */
class RedisQuery extends BaseController
{
    public function getRedis($host = '127.0.0.1', $port = '6379', $password = '', $database = 1)
    {

        $redis = new \Redis();
        if (!$redis->connect($host, $port)) {
            die("Redis连接失败:IP或端口有误");
        }
        if (!empty($password) && !$redis->auth($password)) {
            die("Redis连接失败:密码错误");
        }
        if ($database) {
            $redis->select($database);
        }
        // work中 subscribe 如果一段时间没有接到消息,就会停掉然后停掉,所以加这个语句让其永不超时
        $redis->setOption(\Redis::OPT_READ_TIMEOUT, -1);
        return $redis;
    }

    // 发布消息
    public function register()
    {
        $name = "name_" . rand(0, 10);
        $mobile = rand(1000, 9999);

        $redis = $this->getRedis();
        // 添加消息
        $result = $redis->rpush('register_users', json_encode(array('name' => $name, 'mobile' => $mobile), JSON_UNESCAPED_UNICODE));
        if ($result === false) {
            die("添加消息队列失败");
        }
        $redis->close();
        echo "发布消息成功";
    }

    // 消费消息
    public function work()
    {
        $redis = $this->getRedis();
        if ($redis->lLen("register_users") > 0) {
            $value = $redis->lpop('register_users');
            if ($value) {
                $userInfo = json_decode($value, true);
                echo "新注册用户信息:
";
                echo "姓名:" . $userInfo['name'] . "
";
                echo "手机号:" . $userInfo['mobile'] . "
";
            } else {
                echo "出队完成";
            }
        } else {
            echo "没有消息";
        }
    }

    // 查看队列中的消息
    public function demo()
    {
        $redis = $this->getRedis();
        $list = $redis->lrange('register_users', 0, -1);
        echo "



";
        print_r($list);
    }
}

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部