redis-cli 随 Redis 服务端发布,非独立包;未安装时应按系统选择 redis-tools(Ubuntu)、redis(CentOS 8+)或源码编译;连接远程需注意参数顺序、密码转义、bind 和 protected-mode 配置;本地优先用 Unix socket;调试避免交互模式,推荐管道或脚本方式。

redis-cli 命令不存在?先确认是否装了 Redis 客户端
Linux 上 redis-cli 不是独立安装包,它随 Redis 服务端一起发布。很多人误以为要单独装“Redis 客户端”,结果去 pip 或 npm 装错东西——redis-py 是 Python 库,redis-cli 是官方命令行工具,二者不等价。
检查是否已存在:which redis-cli 或 redis-cli --version。没输出就说明没装,别急着配缓存连接,先解决这个。
- Ubuntu/Debian:直接
sudo apt install redis-tools(不是redis-server,后者会连带启动服务) - CentOS/RHEL 8+:用
sudo dnf install redis(该包含redis-cli) - CentOS 7:EPEL 源启用后
sudo yum install redis - 不想装服务端?可编译安装:下载 Redis 源码,
make后src/redis-cli就是可执行文件,复制到/usr/local/bin即可
连不上远程 Redis?检查 -h、-p、-a 参数顺序和转义
redis-cli 的参数顺序敏感,尤其密码含特殊字符时容易静默失败。比如 redis-cli -a 'p@ss!2024' -h 10.0.1.5 -p 6379 看似正常,但 ! 在 bash 中会被历史扩展,实际传给 redis-cli 的密码可能被截断。
- 密码含
$、!、`等字符,必须用单引号包裹整个密码,且避免在双引号中使用 - 参数顺序建议固定为:
redis-cli -h <code>host-pport-a 'password'(-a必须在-h/-p之后) - 连接超时常见于防火墙或 Redis 配置:
bind默认只监听127.0.0.1,远程连接需改redis.conf中的bind行(加 IP 或注释掉),并确认protected-mode no - 测试连通性优先用
telnet <code>hostport,别一上来就输密码——连端口都不通,输啥都白搭
用 redis-cli 调试缓存逻辑?别依赖交互模式记命令
交互式 redis-cli 适合临时查 key,但写脚本或批量操作时,交互模式反而容易出错:命令未保存、历史不可复现、管道符失效、中文乱码。
- 批量操作一律用
echo "SET foo bar" | redis-cli -h <code>host-pport-a 'pass' - 读取多个 key:用
redis-cli -h <code>hostMGET key1 key2 key3,别进交互模式一个个GET - 调试 Lua 脚本?
--eval参数必须跟脚本路径,key 和 arg 用,分隔,例如:redis-cli --eval myscript.lua key1 key2 , arg1 arg2(注意逗号前后空格) - 时间复杂度高的命令如
KEYS *禁止在生产环境用,改用SCAN迭代;redis-cli默认不显示耗时,加--latency可测响应抖动
配置文件里写死了 bind 127.0.0.1,但又想本地 CLI 连接?别改 conf
很多用户把 redis.conf 的 bind 改成 0.0.0.0 后发现 Redis 绑定到所有接口,安全隐患陡增。其实 redis-cli 本地连接根本不需要改配置——它默认走 Unix socket 或 loopback,比 TCP 更快更安全。
- 确认
redis.conf中unixsocket /var/run/redis/redis.sock未被注释,且权限允许当前用户访问 - 本地连接直接用:
redis-cli -s /var/run/redis/redis.sock(无需 -h/-p/-a) - 如果 socket 路径不对,查
redis-server启动时日志里的Opening Unix socket行,或用redis-cli CONFIG GET unixsocket(前提是已连上) - socket 方式下,
redis-cli不校验密码(auth 机制走 TCP 层),所以密码仍需在redis.conf中设requirepass并配合tcp-port使用
真正麻烦的不是装不上 redis-cli,而是连上以后不知道它默认不读 ~/.rediscli_history 以外的任何配置,也不自动加载 .inputrc。命令补全、历史搜索、颜色高亮这些体验优化,得手动配 shell 别名或 wrapper 脚本——没人替你做。










