Redis 命令行操作
redis-cli 是 Redis 官方提供的命令行客户端,常用于调试、巡检、临时脚本。以下记录一些常用操作示例,方便查阅。
基础连接
redis-cli # 默认连接 127.0.0.1:6379
redis-cli -h 192.168.1.100 -p 6380 # 指定远程主机与端口
redis-cli -a 'passw0rd' # 带密码连接
redis-cli -n 5 # 连接后直接 select 第 6 个库
连接后也可以使用命令 AUTH password、SELECT <db> 切换上下文。
Key-Value 操作
最常用的键值对模型,可用于缓存配置、会话、计数等场景。
SET user:1:name "Alice" EX 3600 # 设置键并附带过期时间(秒)
GET user:1:name # 获取键值
DEL user:1:name # 删除键
EXISTS user:1:name # 判断键是否存在
EXPIRE user:1:name 120 # 设置过期时间(秒)
TTL user:1:name # 查看剩余过期时间(秒)
INCR counter # 自增(不存在时置 0 再 +1)
INCRBY counter 10 # 增加指定步长
PEXPIRE counter 60000 # 设置毫秒级过期
哈希 Hash
适合存储“对象”一类的结构化数据(字段多、但希望共享同一 key),常用于用户资料、配置表。
HSET user:1 name Alice age 24 # 设置多个字段
HGET user:1 name # 获取单个字段
HGETALL user:1 # 获取整个哈希
HDEL user:1 age # 删除字段
列表 List
双端链表,支持从两侧 push/pop,可用于消息队列、任务列表等 FIFO/LIFO 场景。
LPUSH todo "task-A" # 从列表左侧插入元素
RPUSH todo "task-B" # 从右侧插入
LRANGE todo 0 -1 # 读取整个列表
BRPOP todo 0 # 阻塞弹出,常用于简单队列
集合 Set / 有序集合 ZSet
Set 去重无序,常用于标签、黑名单;ZSet 在此基础上带分值排序,可做排行榜、延迟队列等。
SADD tags "golang" "redis" # 添加元素
SMEMBERS tags # 获取所有成员
SISMEMBER tags "redis" # 判断是否存在
ZADD ranking 100 "Alice" 120 "Bob" # 添加有序成员
ZRANGE ranking 0 -1 WITHSCORES # 顺序遍历
ZREVRANK ranking "Bob" # 逆序排名
Pub/Sub
Redis 的发布/订阅模型适合做轻量级事件广播,例如缓存失效、实时通知等。命令行中使用 SUBSCRIBE 和 PUBLISH:
# 终端 A:订阅
redis-cli
SUBSCRIBE cache:invalidate # 订阅指定频道
# 终端 B:发布
redis-cli
PUBLISH cache:invalidate '{"key":"user:123","ts":1691400000}' # 发布消息
订阅端会实时收到 JSON 字符串,然后可以根据需要解析。
通配订阅:
PSUBSCRIBE cache:* # 订阅以 cache: 开头的所有频道
UNSUBSCRIBE cache:invalidate # 取消当前连接对指定频道的订阅
UNSUBSCRIBE # 不带参数时取消所有频道
PUNSUBSCRIBE cache:* # 取消模式订阅
PUNSUBSCRIBE # 不带参数时取消所有模式订阅
Pub/Sub 监控命令
PUBSUB CHANNELS # 列出当前被订阅的频道
PUBSUB CHANNELS cache:* # 按模式过滤频道
PUBSUB NUMSUB cache:invalidate other:topic # 查看指定频道订阅者数量
PUBSUB NUMPAT # 当前存在多少个模式订阅
注意:Redis Pub/Sub 没有持久化、没有 ACK,适合广播型通知;需要可靠队列请使用 Stream 或引入消息队列。
数据库管理
SELECT 2 # 切换到 DB=2(默认 0-15)
DBSIZE # 查看当前库中的键数量
FLUSHDB # 清空当前库
FLUSHALL # 清空所有库
服务器与客户端命令
PING # 测试连接
INFO # 查看服务器概况(加参数可过滤,如 INFO replication)
TIME # 获取服务器时间
MONITOR # 实时打印所有命令(仅调试,不建议生产常开)
CLIENT LIST # 列出所有连接
CLIENT KILL 10.0.0.1:6379 # 断开指定客户端
持久化与安全
SAVE # 立即阻塞并持久化 RDB
BGSAVE # 后台执行 RDB 持久化
SHUTDOWN # 同步保存数据并关闭实例
批量 / 脚本操作
# 执行 Lua 脚本
EVAL 'return redis.call("GET", KEYS[1])' 1 user:1:name
# pipeline(非事务),cmds.txt 每行一个命令
redis-cli --pipe < cmds.txt
常用技巧
redis-cli --raw GET key # 控制输出格式
redis-cli --latency # 测延迟
redis-cli -r 5 PING # 重复命令 5 次
echo "value" | redis-cli -x SET key # 从 stdin 读取值
SCAN代替KEYS,避免一次性遍历全量键:
SCAN 0 MATCH user:* COUNT 100
- 批量删除可结合
SCAN+DEL,或使用redis-cli --scan:
redis-cli --scan --pattern "session:*" | xargs redis-cli DEL
- 单次命令可直接
redis-cli GET key;多条命令建议进入交互模式或使用--pipe。
小结
redis-cli 是排障 与临时脚本的利器。掌握基础命令(增删改查、集合操作)、订阅发布、调试命令,可以快速验证业务逻辑或定位问题。遇到复杂操作,建议写脚本或使用 redis-benchmark、redis-insights 等工具辅助。