Redis 命令速查表 - Redis 缓存数据库常用命令大全
面向用 Redis 做缓存、需要操心内存与过期策略的开发者。Redis 命令本身容易上手,难的是 big key 撑爆内存、热点 key 单点压力、以及缓存穿透/击穿/雪崩这些业务侧问题。读完能按数据结构选对命令,用 INFO memory 与 object encoding 定位内存大户,理解 RDB/AOF 持久化取舍,并用 SCAN/UNLINK 安全地处理大 key 而不阻塞。
典型使用场景
缓存与键值存储运维:连接、基础读写、查看内存与键空间、排查内存暴涨、缓存击穿/雪崩、连接数耗尽,以及持久化(RDB/AOF)与恢复。
连接与基础 Connection 6
redis-cli -h 127.0.0.1 -p 6379 -a passwordredis-cli --scan --pattern "user:*"redis-cli -r 5 -i 1 INFO memoryAUTH passwordSELECT 0DBSIZE数据结构 Data Structure 11
SET key value EX 300GET keyMSET k1 v1 k2 v2HSET user:1 name "tom" age 30HGETALL user:1LPUSH queue task1BRPOP queue 30ZADD rank 100 "user1" 200 "user2"ZRANGE rank 0 -1 WITHSCORESSADD tags "python" "redis"SINTER set1 set2键空间 Key Space 8
EXPIRE key 300TTL keyTYPE keyDEL key1 key2UNLINK keyRENAME old_key new_keyRANDOMKEYOBJECT ENCODING key持久化与内存 Persistence & Memory 7
BGSAVELASTSAVEBGREWRITEAOFINFO memoryMEMORY USAGE keyCONFIG GET maxmemoryCONFIG GET maxmemory-policy慢查询与监控 Slowlog & Monitor 6
SLOWLOG GET 10SLOWLOG RESETCONFIG GET slowlog-log-slower-thanCLIENT LISTCLIENT KILL ID <id>INFO clients集群与复制 Cluster & Replication 5
CLUSTER INFOCLUSTER NODESCLUSTER KEYSLOT keyINFO replicationROLE参数矩阵
| 参数 | 作用 | 示例 |
|---|---|---|
-h | 指定主机 | redis-cli -h 127.0.0.1 |
-p | 指定端口(默认 6379) | redis-cli -p 6380 |
-a | 指定密码(建议用 --user) | redis-cli -a secret |
--scan | 安全遍历大键空间,避免 KEYS 阻塞 | redis-cli --scan --pattern "session:*" | head |
INFO memory | 查看内存使用与碎片率 | redis-cli INFO memory |
EXPIRE | 给键设置过期时间 | EXPIRE token:1 3600 |
TTL | 查看键剩余存活时间 | TTL token:1 |
CONFIG SET | 运行时改配置(部分需重启) | redis-cli CONFIG SET maxmemory 2gb |
SAVE/BGSAVE | 同步/后台落盘 RDB | redis-cli BGSAVE |
FLUSHDB | 清空当前库(危险) | redis-cli FLUSHDB |
易错点与避坑指南
现象内存持续增长直至触发 maxmemory 被逐出或 OOM。
原因键未设过期、大 key(如巨大 hash/list),或客户端缓存无限增长。
处置为缓存键统一设 EXPIRE;用 redis-cli --bigkeys 找大 key 拆分;设合理 maxmemory-policy(如 allkeys-lru)。
现象KEYS * 导致 Redis 卡死、超时雪崩。
原因KEYS 生产环境遍历全量键,阻塞单线程。
处置改用 SCAN/--scan 增量遍历;线上严禁 KEYS *,可用 rename-command 禁用。
现象缓存集中过期,瞬间大量请求穿透到数据库。
原因大量键同一时刻过期(缓存雪崩),或热点 key 失效(击穿)。
处置过期时间加随机抖动避免同时失效;热点 key 用互斥锁/逻辑过期重建;数据库侧加限流。
现象重启后数据全丢。
原因只开 RDB 且间隔长,或 AOF 未开启且崩溃发生在两次快照之间。
处置按重要程度开启 AOF(appendonly yes)并选合适 fsync 策略;关键数据双持久化。
现象连接数打满,新连接被拒。
原因客户端连接未复用、连接泄漏,或 maxclients 过小。
处置用连接池复用;redis-cli CLIENT LIST 查来源;调大 maxclients;排查未关闭连接的代码。
现象误执行 FLUSHDB/FLUSHALL 清空数据。
原因在生产执行了清理命令,且无持久化或副本已同步清空。
处置用 rename-command 重命名危险命令;依赖 AOF/RDB 恢复;从副本或备份重建。
排障路径
1查看内存与碎片率
redis-cli INFO memory关注 used_memory_human 与 mem_fragmentation_ratio,>1.5 说明碎片偏高。
2找出大 key 与类型分布
redis-cli --bigkeys定位需要拆分的大 hash/list/set,避免单 key 阻塞。
3安全遍历键空间
redis-cli --scan --pattern "session:*" | wc -l替代 KEYS,避免阻塞单线程。
4查看当前连接来源
redis-cli CLIENT LIST定位连接泄漏的客户端 IP 与空闲连接。
提示
- 生产环境禁用 KEYS *,用 SCAN 代替,KEYS 会阻塞主线程导致卡顿。
- 删除大 key(列表/哈希/集合)用 UNLINK 不用 DEL,DEL 会阻塞主线程。
- mem_fragmentation_ratio > 1.5 说明碎片率高,考虑重启或使用 activedefrag。
常见问题
Redis 和 Memcached 有什么区别,什么时候该用 Redis?
Redis 支持多种数据结构(字符串、哈希、列表、集合、有序集合)并自带持久化,适合需要复杂数据操作或数据落盘的场景;Memcached 仅支持简单键值且纯内存。需要缓存对象、排行榜、消息队列或会话存储时优先选 Redis。
生产环境为什么不能用 KEYS * 命令?
KEYS * 会遍历整个键空间并阻塞 Redis 主线程,数据量大时会导致服务卡顿甚至超时。应使用 SCAN 命令以增量、非阻塞的方式分批迭代扫描 key。
Redis 的数据会丢吗?如何保证持久化?
Redis 提供 RDB(定时快照)和 AOF(追加日志)两种持久化方式。RDB 恢复快但可能丢最近一次快照后的数据;AOF 更安全但文件更大。生产环境通常同时开启两者以平衡性能与安全性。
由 巧匠 维护
公开更新于 2026年7月21日,内容持续校对官方文档。