跳到主要内容

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 passwordSELECT <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 的发布/订阅模型适合做轻量级事件广播,例如缓存失效、实时通知等。命令行中使用 SUBSCRIBEPUBLISH

# 终端 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-benchmarkredis-insights 等工具辅助。