thinkphp3.2.3 版本使用redis缓存添加认证
2024-08-19 19:54:53
我在使用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认证密码" 即可
最新文章
- linux命令初识
- 小谈一下JavaScript中的JSON
- python 常见排序实例
- Spring定时器的时间表达式
- iOS自动适配
- debian 学习记录-4 -关于linux -2
- 用bootstrap的tab插件做一个图层切换效果(感觉会误导淫们,大家当乐子看吧)
- Yougth的最大化(好题,二分查找 0 1分数规划)
- linux input如何固定设备event handler
- Linux socket 类封装 (面向对象方法)
- Resource 的 IsSealed 问题
- SqlSugar GridView aspnetpager 分页排序
- ansible小计
- 活字格对接RF手持机与ERP系统,帮助RFID快速盘点方案落地
- 重置 Mac 上的 NVRAM 或 PRAM
- opencv自带fast_math.hpp
- JavaScript相关基础知识点
- 4、线程范围内的数据共享之ThreadLocal
- leetcode简单题目两道(5)
- ZT 线程处理函数pthread_cleanup_push / pthread_cleanup_pop
热门文章
- 【算法系列学习】Dijkstra单源最短路 [kuangbin带你飞]专题四 最短路练习 A - Til the Cows Come Home
- 每个国家对应的语言Locale和国家代码对照表
- 调试 Dockerfile - 每天5分钟玩转 Docker 容器技术(15)
- 点击文字选中checkbox
- MyBatis源码解读(1)——SqlSessionFactory
- hexo从零开始到搭建完整
- php高性能开发阅读笔记
- 11、借助POI实现Java生成并打印excel报表(2)
- Windows Server 2016中,安装PHP Manager,ARR3.0或者URL Rewrite 2.0无法成功的解决办法
- 关于蓝桥杯嵌入式STM32的一点收获