我在使用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认证密码" 即可

最新文章

  1. linux命令初识
  2. 小谈一下JavaScript中的JSON
  3. python 常见排序实例
  4. Spring定时器的时间表达式
  5. iOS自动适配
  6. debian 学习记录-4 -关于linux -2
  7. 用bootstrap的tab插件做一个图层切换效果(感觉会误导淫们,大家当乐子看吧)
  8. Yougth的最大化(好题,二分查找 0 1分数规划)
  9. linux input如何固定设备event handler
  10. Linux socket 类封装 (面向对象方法)
  11. Resource 的 IsSealed 问题
  12. SqlSugar GridView aspnetpager 分页排序
  13. ansible小计
  14. 活字格对接RF手持机与ERP系统,帮助RFID快速盘点方案落地
  15. 重置 Mac 上的 NVRAM 或 PRAM
  16. opencv自带fast_math.hpp
  17. JavaScript相关基础知识点
  18. 4、线程范围内的数据共享之ThreadLocal
  19. leetcode简单题目两道(5)
  20. ZT 线程处理函数pthread_cleanup_push / pthread_cleanup_pop

热门文章

  1. 【算法系列学习】Dijkstra单源最短路 [kuangbin带你飞]专题四 最短路练习 A - Til the Cows Come Home
  2. 每个国家对应的语言Locale和国家代码对照表
  3. 调试 Dockerfile - 每天5分钟玩转 Docker 容器技术(15)
  4. 点击文字选中checkbox
  5. MyBatis源码解读(1)——SqlSessionFactory
  6. hexo从零开始到搭建完整
  7. php高性能开发阅读笔记
  8. 11、借助POI实现Java生成并打印excel报表(2)
  9. Windows Server 2016中,安装PHP Manager,ARR3.0或者URL Rewrite 2.0无法成功的解决办法
  10. 关于蓝桥杯嵌入式STM32的一点收获