背景
程序连接 Redis 报错
0 [0]RedisException in Redis.php line 116
thinkphp6.1
NOAUTH Authentication required.
分析
通常这个错误在于 Redis 服务设置了密码认证,而程序连接 redis 时未提供密码导致。
正常在通过使用 redis-cli 连接时
未提供密码会报错误:(error) NOAUTH Authentication required.
密码不正确会报错误:(error) ERR invalid password
但在此次排查中发现,划重点:未提供密码或密码不正确都会导致此文章开头的程序层错误提示!!!
原因
调试后发现,原本的正确密码中含有符号$,而部署后的密码则缺少。
# 正确密码
123$5678
# 部署后密码
123678
很明显是自动化部署脚本的问题。检查后发现在写入环境变量的时候,脚本使用了双引号导致 ($) 符号被识别为变量,且变量为未定义导致结果为空白
# 原脚本示例
echo "123$5678" > .env
修改
方案一、将原脚本中双引号改为单引号解决 ✅
方案二、在($)符号前加反斜杠(\),防止转义问题
方案三、修改 redis 密码为不含转义符号
以上方案均可,根据自己的场景修改即可