Maison  >  Article  >  développement back-end  >  Lorsque le pilote de cache tp5 Predis php n'a pas de module de pilote Redis, utilisez Predis pour vous connecter et utiliser Redis.

Lorsque le pilote de cache tp5 Predis php n'a pas de module de pilote Redis, utilisez Predis pour vous connecter et utiliser Redis.

不言
不言original
2018-06-02 15:59:173122parcourir

Cet article présente principalement le pilote de cache tp5 Predis php. Lorsqu'il n'y a pas de module de pilote Redis, utilisez Predis pour vous connecter et utiliser Redis. Maintenant, je le partage avec vous. à lui

Lorsqu'il n'y a pas de module de pilote Redis, utilisez Predis pour vous connecter et utilisez redis

Installer

composer require predis/predis

pilote de cache tp5 pour ajouter 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();
    }

}

Recommandations associées :

PHP Méthode objet de requête TP5 Request


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn