zoukankan      html  css  js  c++  java
  • thinkphp3.2.3 版本使用redis缓存的时候无法使用认证

    我在使用thinkphp3.2.3的时候 发现如果是使用redis缓存 设置了认证的redis能连接成功 却无法 set 操作 ,检查发现是没有认证导致的  $redis->auth这一步没有,那么官方给出的 Redis.class.php没有的话,我们可以自己加上,在构造函数第29行 将以前的代码改为:

    以前代码如下:

            $options = array_merge(array (
                'host'          => C('REDIS_HOST') ? : '127.0.0.1',
                'port'          => C('REDIS_PORT') ? : 6379,
                'timeout'       => C('DATA_CACHE_TIMEOUT') ? : false,
                'persistent'    => false,
            ),$options);

    加一行 'auth' => C('REDIS_AUTH_PASSWORD') ? C('REDIS_AUTH_PASSWORD'):null,//auth认证的密码  ,改为这样

            $options = array_merge(array (
                'host'          => C('REDIS_HOST') ? : '127.0.0.1',
                'port'          => C('REDIS_PORT') ? : 6379,
                'timeout'       => C('DATA_CACHE_TIMEOUT') ? : false,
                'auth'            => C('REDIS_AUTH_PASSWORD') ? C('REDIS_AUTH_PASSWORD'):null,//auth认证的密码
                'persistent'    => false,
            ),$options);

    这样就能在options中读取到是否启用认证的密码了,然后后面加一个判断

    在这段代码后面

            $this->handler  = new Redis;
            $options['timeout'] === false ?
                $this->handler->$func($options['host'], $options['port']) :
                $this->handler->$func($options['host'], $options['port'], $options['timeout']);

    加上一个判断,判断是否启用了认证密码配置 启用了就去认证一下

            if($this->options['auth']!==null)
            {
                $this->handler->auth($this->options['auth']); //说明有配置redis的认证配置密码 需要认证一下
            }

    总体来看,构造方法被改为了如下:

        public function __construct($options=array()) {
            if ( !extension_loaded('redis') ) {
                E(L('_NOT_SUPPORT_').':redis');
            }
            $options = array_merge(array (
                'host'          => C('REDIS_HOST') ? : '127.0.0.1',
                'port'          => C('REDIS_PORT') ? : 6379,
                'timeout'       => C('DATA_CACHE_TIMEOUT') ? : false,
                'auth'            => C('REDIS_AUTH_PASSWORD') ? C('REDIS_AUTH_PASSWORD'):null,//auth认证的密码
                'persistent'    => false,
            ),$options);
    
            $this->options =  $options;
            $this->options['expire'] =  isset($options['expire'])?  $options['expire']  :   C('DATA_CACHE_TIME');
            $this->options['prefix'] =  isset($options['prefix'])?  $options['prefix']  :   C('DATA_CACHE_PREFIX');        
            $this->options['length'] =  isset($options['length'])?  $options['length']  :   0;        
            $func = $options['persistent'] ? 'pconnect' : 'connect';
            $this->handler  = new Redis;
            $options['timeout'] === false ?
                $this->handler->$func($options['host'], $options['port']) :
                $this->handler->$func($options['host'], $options['port'], $options['timeout']);
            if($this->options['auth']!=null)
            {
                $this->handler->auth($this->options['auth']); //说明有配置redis的认证配置密码 需要认证一下
            }
        }

    然后配置文件里面加上 "REDIS_AUTH_PASSWORD"=>"redis认证密码" 即可

  • 相关阅读:
    html单引号,双引号转义
    把文章里边的html标签去掉(去掉文字的样式,显示css设置的样式)
    java缓存适合使用的情况
    Java内存缓存
    springmvc怎么重定向,从一个controller跳到另一个controller
    jquery 获取标签名(tagName)
    jQuery判断checkbox是否选中的3种方法
    判断一组checkbox中是否有被选中的
    在O(N)时间内求解 正数数组中 两个数相加的 最大值
    两种方法求解 正数数组中 两个数相减 的最大值
  • 原文地址:https://www.cnblogs.com/lizhaoyao/p/6060794.html
Copyright © 2011-2022 走看看