>  기사  >  백엔드 개발  >  tp5 캐시 드라이버 Predis php에 Redis 드라이버 모듈이 없을 경우 Predis를 이용하여 접속하여 Redis를 사용합니다.

tp5 캐시 드라이버 Predis php에 Redis 드라이버 모듈이 없을 경우 Predis를 이용하여 접속하여 Redis를 사용합니다.

不言
不言원래의
2018-06-02 15:59:173116검색

이 글에서는 주로 tp5 캐시 드라이버인 Predis php를 소개합니다. Redis 드라이버 모듈이 없을 때는 Predis를 사용하여 redis를 연결해서 사용하면 됩니다. 이제 필요한 친구들이 참고할 수 있도록 공유하겠습니다.

Redis 드라이버 모듈이 없는 경우 Predis 연결 사용 시 redis


Install

composer require predis/predis

tp5 캐시 드라이버를 사용하여 Predis.php

<?phpnamespace think\cache\driver;use think\cache\Driver;/**
 * Predis缓存驱动,就是php没有redis扩展的时候使用,适合单机部署、有前端代理实现高可用的场景,性能最好
 * 有需要在业务层实现读写分离、或者使用RedisCluster的需求,请使用Redisd驱动
 *
 * 要求安装Predis扩展:https://github.com/nrk/predis
 * 
 */class Predis extends Driver{
    protected $options = [        &#39;scheme&#39;     => &#39;tcp&#39;,        &#39;host&#39;       => &#39;127.0.0.1&#39;,        &#39;port&#39;       => 6379,        &#39;password&#39;   => &#39;&#39;,        &#39;select&#39;     => 0,        &#39;timeout&#39;    => 0,        &#39;expire&#39;     => 0,        &#39;persistent&#39; => false,        &#39;prefix&#39;     => &#39;&#39;,        &#39;database&#39;   => 15,
    ];    
    /**
     * 构造函数
     * @param array $options 缓存参数
     * @access public
     */
    public function __construct($options = [])
    {
        if (!empty($options)) {            
        $this->options = array_merge($this->options, $options);
        }        $func          = $this->options[&#39;persistent&#39;] ? &#39;pconnect&#39; : &#39;connect&#39;;        
        $this->handler = new \Predis\Client;        
        $this->handler->$func($this->options[&#39;host&#39;], $this->options[&#39;port&#39;], $this->options[&#39;timeout&#39;]);        
        if (&#39;&#39; != $this->options[&#39;password&#39;]) {            
        $this->handler->auth($this->options[&#39;password&#39;]);
        }        
        if (0 != $this->options[&#39;select&#39;]) {            
        $this->handler->select($this->options[&#39;select&#39;]);
        }
    }    /**
     * 判断缓存
     * @access public
     * @param string $name 缓存变量名
     * @return bool
     */
    public function has($name)
    {
        return $this->handler->get($this->getCacheKey($name)) ? true : false;
    }    /**
     * 读取缓存
     * @access public
     * @param string $name 缓存变量名
     * @param mixed  $default 默认值
     * @return mixed
     */
    public function get($name, $default = false)
    {
        $value = $this->handler->get($this->getCacheKey($name));        
        if (is_null($value)) {            
        return $default;
        }        
        $jsonData = json_decode($value, true);        // 检测是否为JSON数据 true 返回JSON解析数组, false返回源数据 byron sampson<xiaobo.sun@qq.com>
        return (null === $jsonData) ? $value : $jsonData;
    }    /**
     * 写入缓存
     * @access public
     * @param string    $name 缓存变量名
     * @param mixed     $value  存储数据
     * @param integer   $expire  有效时间(秒)
     * @return boolean
     */
    public function set($name, $value, $expire = null)
    {
        if (is_null($expire)) {            
        $expire = $this->options[&#39;expire&#39;];
        }        
        if ($this->tag && !$this->has($name)) {            
        $first = true;
        }        
        $key = $this->getCacheKey($name);        //对数组/对象数据进行缓存处理,保证数据完整性  byron sampson<xiaobo.sun@qq.com>
        $value = (is_object($value) || is_array($value)) ? json_encode($value) : $value;        
        if (is_int($expire) && $expire) {            
        $result = $this->handler->setex($key, $expire, $value);
        } else {            
        $result = $this->handler->set($key, $value);
        }        
        isset($first) && $this->setTagItem($key);        
        return $result;
    }    /**
     * 自增缓存(针对数值缓存)
     * @access public
     * @param string    $name 缓存变量名
     * @param int       $step 步长
     * @return false|int
     */
    public function inc($name, $step = 1)
    {
        $key = $this->getCacheKey($name);        
        return $this->handler->incrby($key, $step);
    }    /**
     * 自减缓存(针对数值缓存)
     * @access public
     * @param string    $name 缓存变量名
     * @param int       $step 步长
     * @return false|int
     */
    public function dec($name, $step = 1)
    {
        $key = $this->getCacheKey($name);        
        return $this->handler->decrby($key, $step);
    }    /**
     * 删除缓存
     * @access public
     * @param string $name 缓存变量名
     * @return boolean
     */
    public function rm($name)
    {
        return $this->handler->delete($this->getCacheKey($name));
    }    /**
     * 清除缓存
     * @access public
     * @param string $tag 标签名
     * @return boolean
     */
    public function clear($tag = null)
    {
        if ($tag) {            // 指定标签清除
            $keys = $this->getTagItem($tag);            
            foreach ($keys as $key) {                
            $this->handler->delete($key);
            }            
            $this->rm(&#39;tag_&#39; . md5($tag));            
            return true;
        }        
        return $this->handler->flushDB();
    }

}

를 추가하세요. 관련 권장 사항:

PHP TP5 요청 요청 객체 방식


위 내용은 tp5 캐시 드라이버 Predis php에 Redis 드라이버 모듈이 없을 경우 Predis를 이용하여 접속하여 Redis를 사용합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.