php redis实现一个延迟消息队列代码

代码语言:phpcli

所属分类:其他

代码描述:php redis实现一个延迟消息队列代码

代码标签: 一个 延迟 消息 队列

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<?php

class DelayQueue
{
    protected $prefix = 'delay_queue:';
    protected $redis = null;
    protected $key = '';
    private static $_instance = null;

    /**
     * 构造函数
     * DelayQueue constructor.
     * @param $queue
     * @param array $config
     */
    public function __construct($queue,$config = [])
    {
        $this->key = $this->prefix . $queue;
        $this->redis = new Redis();
        $this->redis->connect($config['host'], $config['port'], $config['timeout']);
        $this->redis->auth($config['auth']);
    }

    /**
     * Notes: 获取数据库句柄方法
     * User: jackin.chen
     * Date: 2020/7/20 下午3:55
     * function: getRedis
     * @return null|Redis
     */
    public function getRedis()
    {
        return $this->redis;
    }

    /**
     * Notes:这是获取当前类对象的唯一方式
     * User: jackin.chen
     * Date: 2020/7/20 下午3:55
     * function: getInstance
     * @param string $queue
     * @param array $config
     * @return DelayQueue|null
     * @static
     */
    public static function getInstance($queue, $config = [])
    {
        // 检查对象是否已经存在,不存在则实例化后保存到$instance属性
        if(!(self::$_instance instanceof self)){
            //内部实例化对象
            self::$_instance = new self($queue,$config);
        }
        return self::$_instance;
    }


    /**
     * Notes: 声明成私有方法,禁止克隆对象
     * User: jackin.chen
     * Date: 2020/7/20 下午3:56
     * function: __clone
     */
    private function __clone(){}

    /**
     * Notes: 声明成私有方法,禁止重建对象
     * User: jackin.chen
     * Date: 2020/7/20 下午3:56
     * function: __wakeup
     */
    private function __wakeup(){}


    /**
     * Notes: 删除任务列表
     * User: jackin.chen
     * Date: 2020/7/20 下午4:00
     * function: delTask
     * @param $value
     * @return int
     */
    public function delTask($value)
    {
        return $this->redis->zRem($this->key, $value);
    }

    /**
     * Notes: 获取一条任务
     * User: jackin.chen
     * Date: 2020/7/20 下午4:00
     * function: getTask
     * @return array
     */
    public function getTask()
    {
        //获取任务,以0和当前时间为区间,返回一条记录
        return $this->redis->zRangeByScore($this->key, 0, time(), ['limit' => [0, 1]]);
    }

    /**
     * N.........完整代码请登录后点击上方下载按钮下载查看

网友评论0