8.1.10 基本客户端连接与命令行操作

在运维实践中,最常用的客户端是 redis-cli。它支持交互式会话、批量执行命令、连接远端实例和脚本化调用。掌握基础连接参数、认证方式与常见操作流程,是后续性能调优与故障排查的基础。

0. 客户端与服务端基本架构草图#

文章图片

1. 安装与环境准备(含 redis-cli)#

Debian/Ubuntu:

sudo apt update
sudo apt install -y redis-tools
redis-cli -v
# 预期输出: redis-cli 6.x/7.x

RHEL/CentOS:

sudo yum install -y redis
redis-cli -v

从源码编译(只需要 cli 时):

curl -O http://download.redis.io/redis-stable.tar.gz
tar -xf redis-stable.tar.gz && cd redis-stable
make redis-cli
./src/redis-cli -v

2. 连接方式与常用参数(含命令解释)#

  • 本地默认连接(连接 127.0.0.1:6379):
redis-cli
# 进入交互式,提示符: 127.0.0.1:6379>
  • 指定主机与端口(-h 指定主机,-p 指定端口):
redis-cli -h 192.168.1.10 -p 6379
  • 指定密码(-a 指定认证,生产避免明文):
redis-cli -h 192.168.1.10 -p 6379 -a 'passw0rd'
  • 指定数据库(-n 选择 DB,默认 0):
redis-cli -n 1
  • 使用 TLS(--tls 开启加密,--cacert 指定 CA):
redis-cli --tls -h 192.168.1.10 -p 6379 --cacert /etc/redis/ca.crt
  • 连接哨兵查询主节点(先连接哨兵,再取主地址):
redis-cli -p 26379
SENTINEL get-master-addr-by-name mymaster
# 预期输出: 1) "10.0.0.10" 2) "6379"

3. 交互式基础操作(可执行示例)#

redis-cli -h 127.0.0.1 -p 6379

在交互模式中执行:

PING
# 预期: PONG

INFO server
# 预期: 服务器版本、运行时长等

SELECT 2
# 预期: OK

DBSIZE
# 预期: (integer) 0 或键数量

4. 键管理与通用命令(含解释与安全替代)#

  • 查询键(生产慎用 KEYS,建议 SCAN):
KEYS *
# 可能阻塞,键多时避免使用
SCAN 0 MATCH user:* COUNT 100
# 预期: 返回游标与键列表
  • 查看键类型与过期:
TYPE user:1
TTL user:1
PTTL user:1
  • 设置过期与删除:
EXPIRE user:1 300
PEXPIRE user:1 60000
DEL user:1
UNLINK user:1

5. 运维常用命令(含预期用途)#

INFO memory
# 内存使用概览

CLIENT LIST
# 当前连接列表
CLIENT KILL 192.168.1.20:55000
# 踢出指定客户端

BGSAVE
# 后台生成 RDB 快照
BGREWRITEAOF
# 重写 AOF 文件

SLOWLOG GET 10
# 查看慢日志
INFO replication
# 复制角色与状态

6. 批量与脚本化调用(完整示例)#

批量执行文件:

cat >/tmp/commands.txt <<'EOF'
SET user:1 alice
SET user:2 bob
MGET user:1 user:2
EOF

redis-cli -h 127.0.0.1 -p 6379 < /tmp/commands.txt
# 预期: OK OK 1) "alice" 2) "bob"

单条命令:

redis-cli -h 127.0.0.1 -p 6379 SET k v
# 预期: OK

管道模式提升写入效率:

for i in $(seq 1 5); do
  echo "SET key:$i value:$i"
done | redis-cli --pipe
# 预期: All data transferred. Waiting for the last reply...

7. 安全实践与常见问题排查(含命令)#

安全建议:
- 避免明文密码,使用环境变量:

export REDISCLI_AUTH='passw0rd'
redis-cli -h 127.0.0.1 -p 6379
  • 生产避免 KEYS *FLUSHALLFLUSHDB

排错清单:
1) 连接被拒绝(Connection refused)

ss -lntp | grep 6379
# 未监听说明 Redis 未启动或端口变更

2) 认证失败(NOAUTH Authentication required)

redis-cli -h 127.0.0.1 -p 6379
AUTH passw0rd
# 预期: OK

3) 超时或网络不通

ping 192.168.1.10
telnet 192.168.1.10 6379
# 若不通,检查防火墙与安全组

4) 哨兵无法返回主节点

redis-cli -p 26379 SENTINEL masters
# 检查名称是否与配置一致

8. 练习与实战任务#

1) 使用 redis-cli 连接本地实例,执行 PINGINFO serverDBSIZE 并记录输出。
2) 编写批量命令文件创建 100 个键,使用 SCAN 分批查看。
3) 使用 CLIENT LIST 找出你的连接,随后用 CLIENT KILL 终止它并重新连接。
4) 触发 BGSAVE 后检查持久化状态(INFO persistence)。
5) 通过 REDISCLI_AUTH 环境变量完成认证连接,避免明文密码。