Redis密码认证仅靠配置文件中未注释的requirepass 密码一行生效,必须确保无#号、无等号、无不可见字符,且修改后需重启Redis服务才能生效。

直接改 requirepass 行,不加注释、不拼错、不漏空格
Redis 密码认证只靠配置文件里一行生效:requirepass。它必须是未被注释的独立配置项,后面紧跟一个空格和密码字符串。常见错误是保留了前面的 #,或者写成 requirepass=xxx(等号不合法),又或者密码里混入了不可见字符(比如从网页复制时带的全角空格)。
正确做法是用文本编辑器打开 redis.conf,搜索 requirepass,找到类似这行:
# requirepass foobared
删掉开头的 # 和空格,改成:
requirepass myP@ssw0rd2026
- 密码建议含大小写字母、数字、符号,避免常见单词或纯数字
- 不要在密码前后加引号,Redis 不识别
- 确认该行不在任何
if块或条件段落里(比如没被include文件覆盖)
改完必须重启 Redis,否则新密码不生效
redis.conf 是启动时加载的静态配置,运行中修改文件内容不会自动重载。你改完保存后,得让 Redis 进程重新读取整个配置。不重启,config get requirepass 仍返回空或旧值。
重启方式取决于你的部署方式:
- 如果是 systemd 服务:运行
sudo systemctl restart redis或sudo systemctl restart redis-server(服务名以systemctl list-units | grep redis查为准) - 如果是传统 init.d:用
sudo service redis_6379 restart(注意实例名,比如redis_6380) - 如果手动启的:先
redis-cli shutdown,再用redis-server /path/to/redis.conf重新启动
重启失败常见原因是配置语法错误,可先用 redis-server --test-memory 或 redis-server /path/to/redis.conf --test-conf 验证配置合法性。
密码设好后,redis-cli 登录必须显式带 -a 或手动 AUTH
密码启用后,redis-cli 连上只是建立 TCP 连接,不代表能执行命令。不认证就操作会立刻报错:(error) NOAUTH Authentication required.
两种认证方式都有效:
- 登录时直接带密码:
redis-cli -h 127.0.0.1 -p 6379 -a myP@ssw0rd2026 - 先连再认证:
redis-cli -h 127.0.0.1 -p 6379→ 进入交互后输入AUTH myP@ssw0rd2026
注意:-a 参数会在 shell 历史中明文留下密码,生产环境慎用;若用脚本调用,建议改用 REDISCLI_AUTH 环境变量或配置 ~/.redisclirc(Redis 7.0+ 支持)。
Docker 容器里改 redis.conf 要注意挂载与启动参数优先级
如果你的 Redis 运行在 Docker 中,且用了自定义 redis.conf,必须确认容器是否真的加载了你改的那份配置。常见陷阱是:
- 配置文件挂载路径错误,比如宿主机改了
/opt/redis.conf,但容器里实际加载的是/usr/local/etc/redis/redis.conf - 启动命令里用了
--requirepass参数(如docker run ... redis --requirepass xxx),它会覆盖redis.conf里的requirepass设置 - 用了
include引入其他配置文件,而密码设置在被 include 的文件里,但主配置里没开include路径
验证方式很简单:进容器执行 redis-cli config get requirepass,看返回值是否是你设的密码。如果不是,说明配置没生效,得回头检查挂载路径或启动参数。
密码不是设完就一劳永逸的事——Redis 6.0+ 的 ACL 用户体系、主从同步时的 masterauth 配置、以及 Sentinel 或 Cluster 模式下的节点间认证,都会让单纯改 requirepass 变得不够用。尤其在集群场景下,漏配从节点或哨兵节点的认证,会导致故障转移失败。


















