<?php
/**
 * Created by PhpStorm.
 * User: zhengmingwei
 * Date: 2020/3/1
 * Time: 6:13 PM
 */


namespace addons\unishop\extend;

use think\Env;
use think\Exception;

/**
 * Class Redis
 * @package addons\unishop\extend
 *
 */
class Redis
{
    public $handler = null;
    private $options = [];

    /**
     * 构造函数
     * @param array $options 缓存参数
     * @access public
     */
    public function __construct($options = [])
    {
        self::available();

        $this->options = array_merge([
            'host'       => Env::get('redis.host', '127.0.0.1'),
            'port'       => Env::get('redis.port', 6379),
            'password'   => Env::get('redis.password', ''),
            'select'     => Env::get('redis.select', 0),
            'timeout'    => Env::get('redis.timeout', 0),
            'expire'     => Env::get('redis.expire', 0),
            'persistent' => Env::get('redis.persistent', false),
            'prefix'     => Env::get('redis.prefix', ''),
        ], $options);

        try {
            $this->handler = new \Redis;
            if ($this->options['persistent']) {
                $this->handler->pconnect($this->options['host'], $this->options['port'], $this->options['timeout'], 'persistent_id_' . $this->options['select']);
            } else {
                $this->handler->connect($this->options['host'], $this->options['port'], $this->options['timeout']);
            }

            if ('' != $this->options['password']) {
                $this->handler->auth($this->options['password']);
            }

            if (0 != $this->options['select']) {
                $this->handler->select($this->options['select']);
            }

        } catch (\RedisException $e) {
            throw new Exception($e->getMessage().': redis');
        }
    }

    public static function available()
    {
        if (!extension_loaded('redis')) {
            throw new Exception('not support: redis');
        }
    }

}