Redis 常用查询操作:五种数据类型速查 + 生产环境避坑
本文是速查表,不含原理推导。覆盖连接与排查、五种数据类型(String/Hash/List/Set/ZSet)常用命令及时间复杂度、过期与 TTL 系列、SCAN 游标遍历、INFO 各 section、CONFIG 热配置、事务与 Lua、键空间通知、Pub/Sub、持久化与备份恢复、性能压测、Cluster 集群操作、监控诊断、运维高频场景等场景。适合需要快速查找 Redis 命令写脚本或做运维操作时来查,不含原理推导和设计思路解释——要看原理请移步 Redis 分类下其他深度文章。
版本说明
以下命令在 Redis 5.0/6.0/7.0 均通用,SCAN 系列命令自 2.8 起就已存在。本文为速查表,生产环境选用命令时优先参考本表具体命令用法,不做额外原理解释。复核时间 2026-09。
# 1. 连接与基础排查
登录一个 Redis 实例,常见参数组合:
redis-cli -c -a <REDIS_PWD> -p 6379 -h <redis-host> --raw
1
-c:cluster 模式下自动跟随MOVED重定向,单机模式不需要-a:密码认证(命令行传密码会有安全告警,生产环境建议改用--pass从文件读取或用REDISCLI_AUTH环境变量)--raw:以原始格式输出(不加会把中文等内容转成转义字符)-n <db>:指定数据库编号(默认0)--latency:延迟监控模式--bigkeys:扫描大 key(会遍历,有一定开销但可接受)
批量认证方式(适合脚本):
export REDISCLI_AUTH="<PASSWORD>"
redis-cli -h <HOST> -p <PORT> PING
1
2
2
基础检查命令:
PING # 返回 PONG,测试连接
SELECT 0 # 切换数据库
FLUSHDB # 清空当前数据库(危险!)
FLUSHALL # 清空所有数据库(危险!)
SHUTDOWN [NOSAVE|SAVE] # 关闭 Redis
1
2
3
4
5
2
3
4
5
检查慢查询相关配置:
CONFIG GET slowlog-log-slower-than # 慢查询阈值,单位微秒,-1关闭,0记录所有
CONFIG GET slowlog-max-len # 慢查询日志最多保留多少条
1
2
2
# 2. 数据类型与常用命令速查
# 2.1 String(字符串)——最常用
# 基础读写
GET key # O(1) 获取值
SET key value [EX seconds] [PX milliseconds] [NX|XX] # O(1) 设置值
SETNX key value # O(1) 仅 key 不存在时设置(分布式锁基础)
SETXX key value # O(1) 仅 key 存在时设置
GETSET key value # O(1) 设置新值并返回旧值
# 计数操作
INCR key # O(1) 原子递增
DECR key # O(1) 原子递减
INCRBY key increment # O(1) 指定步长递增
DECRBY key decrement # O(1) 指定步长递减
INCRBYFLOAT key increment # O(1) 浮点数递增(高并发下有精度风险)
# 字符串操作
APPEND key value # O(N) 追加字符串,返回追加后长度
STRLEN key # O(1) 获取字符串长度
GETRANGE key start end # O(N) 获取子串(闭区间,负数从末尾算)
SETRANGE key offset value # O(N) 从指定偏移量覆写
# 批量操作
MSET key1 value1 key2 value2 ... # O(N) 批量设置
MGET key1 key2 key3 ... # O(N) 批量获取
# 其他
GETEX key [EX seconds] [PX milliseconds] [PERSIST] # O(1) 获取并可设过期
SETEX key seconds value # O(1) 设置值并指定过期秒数
PSETEX key milliseconds value # O(1) 设置值并指定过期毫秒
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
时间复杂度速记:所有 O(1) 操作都是原子级别,MGET/MSET 的 N 是 key 数量。
# 2.2 Hash(哈希)——对象存储
# 基础操作
HSET key field value [field value ...] # O(1) 设置hash字段,返回设置数量
HGET key field # O(1) 获取hash字段
HDEL key field [field ...] # O(N) 删除field,返回删除数量
HLEN key # O(1) 获取field数量
HEXISTS key field # O(1) 判断field是否存在
# 批量操作
HMGET key field [field ...] # O(N) 批量获取field
HMSET key field value [field value ...] # O(N) 批量设置(已废弃,推荐HSET)
# 获取全部
HGETALL key # O(N) 获取全部field-value(阻塞风险!)
HKEYS key # O(N) 获取所有field
HVALS key # O(N) 获取所有value
# 遍历(大数据量必须用这个)
HSCAN key cursor [MATCH pattern] [COUNT count] # O(1) 渐进式遍历
# 数值操作
HINCRBY key field increment # O(1) 对数值field递增
HINCRBYFLOAT key field increment # O(1) 对数值field递增浮点数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
坑:HGETALL 对大 Hash(几十万 field)会瞬间阻塞 Redis 主线程,大 Hash 场景必须用 HSCAN。
# 2.3 List(列表)——队列/栈
# 两端操作
LPUSH key value [value ...] # O(1) 头部插入,返回列表长度
RPUSH key value [value ...] # O(1) 尾部插入,返回列表长度
LPOP key # O(1) 头部弹出
RPOP key # O(1) 尾部弹出
# 索引操作
LRANGE key start stop # O(N) 获取区间元素(闭区间,-1表示末尾)
LLEN key # O(1) 获取列表长度
LINDEX key index # O(N) 按索引获取,负数从末尾算
LSET key index value # O(N) 按索引设置新值
LINSERT key BEFORE|AFTER pivot value # O(N) 在 pivot 前后插入
# 阻塞操作(消息队列核心)
BLPOP key [key ...] timeout # O(1) 阻塞式左弹
BRPOP key [key ...] timeout # O(1) 阻塞式右弹
BRPOPLPUSH source destination timeout # O(1) 阻塞式右弹并左推
# 修整操作
LTRIM key start stop # O(N) 截断保留区间
LREM key count value # O(N) 删除 count 个 value(count>0从头,<0从尾,=0全部)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
注:BLPOP/BRPOP 常用于消息队列,但需要业务方处理重试和幂等。
# 2.4 Set(无序集合)——去重/交集/差集
# 基础操作
SADD key member [member ...] # O(N) 添加成员,返回添加数量
SREM key member [member ...] # O(N) 删除成员,返回删除数量
SMEMBERS key # O(N) 获取全部成员(阻塞风险!)
SCARD key # O(1) 获取成员数量
SISMEMBER key member # O(1) 判断成员是否存在
SRANDMEMBER key [count] # O(N) 随机获取 count 个(不删除)
SPOP key [count] # O(1) 随机弹出 count 个(删除)
# 遍历
SSCAN key cursor [MATCH pattern] [COUNT count] # O(1) 渐进式遍历
# 集合运算
SINTER key [key ...] # O(N*M) 交集
SUNION key [key ...] # O(N) 并集
SDIFF key [key ...] # O(N) 差集(在第一个集合中不在后面的集合中)
SINTERSTORE destination key [key ...] # O(N*M) 交集存入新key
SUNIONSTORE destination key [key ...] # O(N) 并集存入新key
SDIFFSTORE destination key [key ...] # O(N) 差集存入新key
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 2.5 ZSet(有序集合)——排行榜
# 基础操作
ZADD key [NX|XX] [CH] [INCR] score member [score member ...] # O(log N) 添加
ZREM key member [member ...] # O(N*log N) 删除成员
ZCARD key # O(1) 获取成员数量
ZSCORE key member # O(1) 获取成员分数
# 范围查询
ZRANGE key start stop [WITHSCORES] # O(log N + M) 按索引升序
ZREVRANGE key start stop [WITHSCORES] # O(log N + M) 按索引降序
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] # 按分数区间
ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count] # 按分数降序
# 排名相关
ZRANK key member # O(log N) 获取排名(0-based,升序)
ZREVRANK key member # O(log N) 获取排名(降序)
ZCOUNT key min max # O(log N) 统计分数区间成员数
# 增量操作
ZINCRBY key increment member # O(log N) 递增成员分数
# 遍历
ZSCAN key cursor [MATCH pattern] [COUNT count] # O(1) 渐进式遍历
# 集合运算
ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight ...] [AGGREGATE SUM|MIN|MAX]
ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight ...] [AGGREGATE SUM|MIN|MAX]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 3. 过期与 TTL 相关
EXPIRE key seconds # O(1) 设置key的过期秒数,返回1成功0失败
PEXPIRE key milliseconds # O(1) 设置key的过期毫秒数
TTL key # O(1) 查看剩余过期秒数
PTTL key # O(1) 查看剩余过期毫秒数
# 返回值:-1表示永不过期,-2表示key不存在,-3表示已过期但在SELECT后待删
EXPIREAT key timestamp # O(1) 设置UNIX时间戳(秒)
PEXPIREAT key timestamp # O(1) 设置UNIX时间戳(毫秒)
PERSIST key # O(1) 移除key的过期时间
EXPIRE key 0 # O(1) 立即过期(等同于PERSIST)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 4. 键管理命令
EXISTS key [key ...] # O(N) 判断key是否存在,返回存在数量
TYPE key # O(1) 返回数据类型(string/hash/list/set/zset/none)
DEL key [key ...] # O(N) 删除key,返回删除数量
RENAME key newkey # O(1) 重命名(覆盖式)
RENAMENX key newkey # O(1) 仅newkey不存在时重命名
RENAME mykey newkey # 如果newkey已存在会覆盖
OBJECT ENCODING key # O(1) 查看内部编码(int、raw、ziplist、quicklist、intset、hashtable)
OBJECT IDLETIME key # O(1) 查看空闲时间(未访问时长,单位秒)
OBJECT REFCOUNT key # O(1) 查看引用计数(仅 debug 模式)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 5. SCAN 系列:线上只能用 SCAN
# 为什么不能用 KEYS(坑)
KEYS pattern # O(N) 阻塞遍历,生产环境禁用!会卡死所有请求
# 正确做法:SCAN 游标遍历
SCAN cursor [MATCH pattern] [COUNT count] # 返回 [cursor, keys]
# 示例:遍历所有以 mykey 开头的 key
# scan 0 MATCH mykey* COUNT 1000 -> ["12345", ["key1", "key2"]]
# 继续 scan 12345 MATCH mykey* COUNT 1000 直到游标变为 0
# 配套游标遍历(用于大数据类型内部元素)
HSCAN key cursor [MATCH pattern] [COUNT count] # 遍历hash的field
SSCAN key cursor [MATCH pattern] [COUNT count] # 遍历set的member
ZSCAN key cursor [MATCH pattern] [COUNT count] # 遍历zset的member
# 游标使用技巧(重要)
# 1. 终止条件是游标回到 0,不是返回结果为空
# 2. count 是"建议每次扫描的桶数",不是精确返回条数
# 3. 遍历期间数据可能变化(CAP 权衡)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 6. INFO 各 section 速查
# 核心必看
INFO server # redis_version、uptime_in_days/seconds、port、pid、arch_bits
INFO clients # connected_clients(已连接数)、blocked_clients(阻塞数)
INFO memory # used_memory_human、used_memory_peak_human、mem_fragmentation_ratio、mem_allocator
# 性能相关
INFO stats # total_commands_processed、total_connections_received、instantaneous_ops_per_sec
INFO cpu # used_cpu_sys、used_cpu_user、used_cpu_sys_children、used_cpu_user_children
# 持久化相关
INFO persistence # rdb_enabled、aof_enabled、rdb_last_save_time、aof_last_bgrewrite_status
# 复制相关
INFO replication # role(master/slave)、master_link_status、connected_slaves
# 集群相关
INFO cluster # cluster_enabled
# key 统计
INFO keyspace # db0:keys=xxx,expires=xxx,avg_ttl=xxx
# 命令统计(看慢查询来源)
INFO commandstats # 各命令调用次数、总耗时、平均耗时、慢查询次数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
常看指标:
mem_fragmentation_ratio> 1.5 → 内存碎片多,考虑重启或MEMORY PURGEblocked_clients> 0 → 有BLPOP阻塞等待used_memory_peak_human→ 历史峰值内存instantaneous_ops_per_sec→ 每秒命令数
# 7. 连接与客户端管理
CLIENT LIST # 列出所有连接(id、addr、port、cmd、flag、db)
CLIENT KILL [ID <id>] [IP <ip>] [PORT <port>] [LADDR <ip:port>] [SKIPME yes|no] # 关闭连接
CLIENT GETNAME # 获取当前连接设置的name
CLIENT SETNAME <name> # 设置当前连接的名字(方便调试和排查)
CLIENT ID # 获取当前连接ID
CLIENT PAUSE <timeout> [WRITE|ALL] # 暂停所有客户端/写客户端操作
CLIENT INFO # 当前连接详细信息
CLIENT REPLY ON|OFF|SKIP # 控制响应方式
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 8. 常用 CONFIG 速查
# 查询
CONFIG GET pattern # 支持通配符,如 CONFIG GET slowlog*
CONFIG GET *
# 常用配置项
maxmemory # 最大内存限制(如 2gb)
maxmemory-policy # 内存淘汰策略
# volatile-lru - 有过期时间的key使用LRU
# allkeys-lru - 所有key使用LRU
# volatile-random - 有过期时间的key随机
# allkeys-random - 所有key随机
# volatile-ttl - 有过期时间的key优先删除TTL短的
# noeviction - 不淘汰,返回错误
appendonly # AOF持久化开关(yes/no)
appendfilename # AOF文件名
appendfsync # AOF同步策略(always/everysec/no)
save # RDB快照策略(如 "900 1 300 10 60 10000")
requirepass # 密码
bind # 绑定地址(0.0.0.0 允许任意访问)
timeout # 客户端空闲超时(0表示禁用)
tcp-keepalive # TCP保活秒数
databases # 数据库数量(默认16)
# 慢查询配置
slowlog-log-slower-than # 阈值,单位微秒,-1关闭,0记录所有
slowlog-max-len # 队列最大长度
# 热生效(运行时修改,重启失效)
CONFIG SET maxmemory 2gb
CONFIG SET maxmemory-policy allkeys-lru
CONFIG SET slowlog-log-slower-than 10000 # 10毫秒
CONFIG SET slowlog-max-len 10000
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 9. 事务与 Lua 脚本速查
# 事务
MULTI # 开启事务
SET a 1
INCR a
GET a
EXEC # 执行事务,返回所有命令结果数组
DISCARD # 取消事务
# 乐观锁
WATCH key [key ...] # 监视key,EXEC时检查是否被修改(修改则事务失败回滚)
UNWATCH # 取消所有 WATCH
# Lua 脚本
EVAL "return redis.call('get', KEYS[1])" 1 mykey # 执行脚本
EVALSHA <sha1> 1 mykey # 用缓存的脚本执行
SCRIPT LOAD "return redis.call('get', KEYS[1])" # 预加载脚本,返回sha1
SCRIPT EXISTS <sha1> [sha1 ...] # 检查脚本是否已缓存
SCRIPT FLUSH # 清空脚本缓存
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 10. 常见坑汇总
- ✗
HGETALL/SMEMBERS对大 key 有阻塞风险,大 Hash 或大 Set 场景必须用HSCAN/SSCAN - ✗ 永远不要在生产环境执行
KEYS,模糊匹配一律用SCAN - ✗
INCRBYFLOAT高并发下有浮点精度问题,慎用于精确金额计算 - ✗
LRANGE key 0 10是闭区间,返回11个元素 - ✓ ZSet 分数是 64 位浮点数,比较时注意精度
- ✓
EXPIRE返回1成功、0不存在、-2已过期 - ✓
CLIENT KILL会踢掉连接,被踢客户端会收到 connection reset - ✓
BLPOP/BRPOP返回nil表示超时 - ✓ Redis 事务不支持回滚(除了 WATCH 的乐观锁失败),这是设计选择
- ✓ Redis 6.2+ 支持
CLIENT KILL IP x.x.x.x,老版本需要用 lua 脚本
# 11. 键空间通知(Keyspace Notifications)
# 启用键空间通知(默认关闭)
CONFIG SET notify-keyspace-events KEA
# 订阅事件
PSUBSCRIBE __keyspace@0__:mykey # 监听 db0 中 mykey 的所有事件
PSUBSCRIBE __keyevent@0__:set # 监听 db0 中所有 set 操作
# 常用事件类型
# K: 键事件,E: 散列键事件,S: 集合键事件,L: 列表键事件,Z: 有序集合键事件
# g: DEL/EXPIRE 等通用命令
# s: SET/GET 等字符串命令
# h: HSET 等哈希命令
# l: LPUSH 等列表命令
# z: ZADD 等有序集合命令
# $: 字符串命令的写操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
应用场景:实现延迟队列、定时任务、排行榜变更通知等。
# 12. Pub/Sub 订阅发布
# 订阅
SUBSCRIBE channel [channel ...] # 订阅频道
PSUBSCRIBE pattern [pattern ...] # 按模式订阅
UNSUBSCRIBE [channel [channel ...]] # 取消订阅
PUNSUBSCRIBE [pattern [pattern ...]] # 取消模式订阅
# 发布
PUBLISH channel message # 向频道发布消息,返回订阅者数量
# 查看
PUBSUB NUMSUB [channel ...] # 查看频道订阅者数量
PUBSUB CHANNELS [pattern] # 查看活跃频道列表
PUBSUB PATTERNS # 查看模式订阅数量
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
生产环境注意:Pub/Sub 是瞬时的,消息不持久化,离线订阅者收不到。建议业务层做消息确认或用消息队列。
# 13. 持久化与备份恢复
# RDB 快照
SAVE # 同步生成 RDB(阻塞)
BGSAVE # 后台异步生成 RDB
LASTSAVE # 上次成功保存的时间戳
# AOF 追加
BGREWRITEAOF # 触发 AOF 重写压缩
1
2
3
4
5
6
7
2
3
4
5
6
7
恢复数据:只要把 RDB 文件或 AOF 文件放到 Redis 配置的 dir 目录下,启动时自动加载。
# 14. 性能压测
# 官方压测工具 redis-benchmark
redis-benchmark -h <host> -p <port> -n 100000 -c 50 -t get,set
# -n 请求数,-c 并发连接数,-t 指定命令,-q 静默输出
# 压测 Pipeline 效率
redis-benchmark -h <host> -p <port> -n 100000 -t ping -P 16
# -P 每个 Pipeline 包含的命令数
1
2
3
4
5
6
2
3
4
5
6
# 15. 集群命令(Redis Cluster)
# Cluster 信息
CLUSTER INFO # 集群状态
CLUSTER NODES # 集群节点列表
CLUSTER SLOTS # 槽位分配
# 节点操作
CLUSTER MEET <ip> <port> # 新节点加入集群
CLUSTER FORGET <node_id> # 从集群移除节点
CLUSTER REPLICATE <node_id> # 将当前节点设为指定主节点的从节点
# 槽位管理
CLUSTER ADDSLOTS <slot> [slot ...] # 为节点分配槽位
CLUSTER DELSLOTS <slot> [slot ...] # 移除槽位
CLUSTER SETSLOT <slot> NODE <node_id> # 迁移槽位归属
CLUSTER GETKEYSINSLOT <slot> <count> # 查看槽位中的 key
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 16. 监控与诊断
# 慢查询
SLOWLOG GET [count] # 获取最近 count 条慢查询
SLOWLOG LEN # 获取慢查询队列长度
SLOWLOG RESET # 清空慢查询队列
# 内存分析
MEMORY USAGE key # O(1) 查看 key 占用的字节数
MEMORY DOCTOR # 给出内存使用建议
MEMORY STATS # 详细内存统计
# 实时命令监控(生产禁用!)
MONITOR # 实时输出所有命令,会显著拖慢实例
# 大 key 分析
redis-cli --bigkeys # 扫描各类型最大的 key
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 17. 运维高频场景速查
# 查找大 key
redis-cli --bigkeys -h <host> -p <port>
# 安全清空(带认证)
redis-cli -a <PASSWORD> FLUSHDB
redis-cli -a <PASSWORD> FLUSHALL ASYNC # 异步清空,不阻塞
# 导出所有 key(迁移用)
redis-cli --scan | head -n 1000 | xargs redis-cli -a <PWD> GET
# 查看 key 的过期时间
TTL key # 秒
PTTL key # 毫秒
## 18. Server 管理命令
```bash
# 服务器信息
INFO [section] # 查看服务器信息(可指定 section)
DEBUG SEGFAULT # 模拟崩溃(测试用)
SHUTDOWN [NOSAVE|SAVE] # 关闭服务器
# 配置重载
CONFIG REWRITE # 重写配置文件(持久化 runtime 修改)
CONFIG RESETSTAT # 重置统计信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# Agent 可直接解析的元数据块
{
"runbook": {
"task": "redis-commonly-used-commands-cheatsheet",
"permalinks": ["/pages/032143/"],
"category": "database/Redis",
"tags": ["redis", "cheatsheet", "commands", "datatype", "ttl", "scan", "info", "config", "transaction"],
"redis_versions": ["5.0", "6.0", "7.0"],
"verified_date": "2026-09"
}
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
上次更新: 9/11/2026