Redis 命令大全详解(全面、系统、实战导向)
Redis 提供了 200+ 条命令,覆盖数据操作、事务管理、持久化控制、集群运维等多个维度。本文以 分类 + 场景 + 示例 + 注意事项 的方式,系统梳理 Redis 核心命令,帮助开发者和运维人员快速掌握其用法与最佳实践。
一、Redis 命令分类总览
| 类别 | 主要命令数量 | 典型用途 |
|---|---|---|
| 🔤 通用命令(Generic) | ~10 | 键管理、过期、类型判断等 |
| 📦 String 命令 | ~15 | 字符串读写、计数、位操作 |
| 🗂️ Hash 命令 | ~10 | 对象字段操作 |
| 📥 List 命令 | ~10 | 队列、栈结构操作 |
| 🔗 Set 命令 | ~10 | 集合去重、交并差运算 |
| 🏆 Sorted Set 命令 | ~15 | 排行榜、范围查询 |
| 🎯 Bitmap 命令 | ~5 | 位图统计 |
| 🌍 Geo 命令 | ~5 | 地理位置搜索 |
| 📊 HyperLogLog 命令 | ~3 | 去重计数 |
| 📜 Stream 命令 | ~10 | 消息队列、事件流 |
| 🔐 事务与脚本 | ~5 | MULTI/EXEC、Lua 脚本 |
| 🔁 持久化控制 | ~5 | RDB/AOF 管理 |
| 🖥️ 服务器管理 | ~10 | 状态监控、配置修改 |
二、核心命令详解(按类型分类)
1. 通用命令(Generic Commands)
✅ KEYS pattern
- 功能:查找匹配的键(慎用!)
- 示例:
KEYS user:* # 返回所有以 user: 开头的 key KEYS * # 全量扫描(生产禁用) - ⚠️ 注意:会阻塞主线程,大库慎用。建议使用
SCAN替代。
✅ SCAN cursor [MATCH pattern] [COUNT count]
- 功能:渐进式遍历 key,不阻塞
- 示例:
SCAN 0 MATCH user:* COUNT 10 - ✅ 生产推荐:用于监控、清理过期 key。
✅ EXISTS key [key ...]
- 功能:判断 key 是否存在
- 返回值:存在的 key 数量
EXISTS user:1001 user:1002 # 返回 2
✅ DEL key [key ...]
- 功能:删除一个或多个 key
- 示例:
DEL user:1001 session:abc - ⚠️ 时间复杂度 O(N),大 key 删除可能阻塞。
✅ TYPE key
- 功能:查看 key 的数据类型
TYPE user:1001 # 返回 string / hash / list / set / zset 等
✅ TTL key / PTTL key
- 功能:查看 key 剩余生存时间(秒/毫秒)
- 返回值:
-
0:剩余时间
- -1:永不过期
- -2:key 不存在或已过期
TTL session:abc # 返回 300 -
✅ EXPIRE key seconds / PEXPIRE key milliseconds
- 功能:设置过期时间
EXPIRE user:1001 3600
✅ PERSIST key
- 功能:移除过期时间,变为永久 key
PERSIST user:1001
✅ RENAME key newkey / RENAMENX key newkey
- 功能:重命名 key(NX:仅当新 key 不存在时)
RENAME temp:user user:1001
✅ MOVE key db
- 功能:将 key 移动到指定数据库(默认 16 个 db,0-15)
MOVE user:1001 1
2. String 命令
✅ SET key value [EX seconds] [PX milliseconds] [NX|XX]
- 功能:设置字符串值
- 扩展参数:
EX:过期时间(秒)PX:过期时间(毫秒)NX:key 不存在时才设置(实现锁)XX:key 存在时才设置
SET session:abc "user=123" EX 1800 NX
✅ GET key
- 功能:获取字符串值
GET user:1001
✅ INCR key / DECR key
- 功能:自增/自减 1(必须是整数)
INCR page:view:counter
✅ INCRBY key increment / DECRBY key decrement
- 功能:按指定值增减
INCRBY user:1001:score 10
✅ APPEND key value
- 功能:追加字符串
APPEND log "error occurred\n"
✅ GETRANGE key start end
- 功能:获取子字符串(支持负索引)
GETRANGE user:1001 0 9
✅ SETRANGE key offset value
- 功能:从偏移量开始替换字符串
SETRANGE user:1001 5 "new"
✅ STRLEN key
- 功能:返回字符串长度
STRLEN user:1001
✅ BITOP / BITCOUNT / GETBIT / SETBIT
- 功能:位操作(用于 Bitmap)
SETBIT sign:20240405 10 1 # 第10位设为1 GETBIT sign:20240405 10 # 获取第10位 BITCOUNT sign:20240405 # 统计1的个数
3. Hash 命令
✅ HSET key field value / HMSET key field value [field value ...]
- 功能:设置字段值(HMSET 已废弃,统一用 HSET)
HSET user:1001 name Alice age 25
✅ HGET key field / HMGET key field [field ...]
- 功能:获取单个/多个字段
HGET user:1001 name HMGET user:1001 name age city
✅ HGETALL key
- 功能:获取所有字段和值(注意顺序)
HGETALL user:1001
✅ HDEL key field [field ...]
- 功能:删除字段
HDEL user:1001 temp_field
✅ HLEN key
- 功能:字段数量
HLEN user:1001
✅ HINCRBY key field increment
- 功能:字段值自增
HINCRBY user:1001 age 1
✅ HEXISTS key field
- 功能:判断字段是否存在
HEXISTS user:1001 email
✅ HKEYS key / HVALS key
- 功能:获取所有字段名 / 所有值
HKEYS user:1001 # name, age, city HVALS user:1001 # Alice, 25, Beijing
4. List 命令
✅ LPUSH key value [value ...] / RPUSH key value [value ...]
- 功能:从左/右插入元素
LPUSH news:latest "article_1" RPUSH queue "task_1"
✅ LPOP key / RPOP key
- 功能:从左/右弹出元素
LPOP queue
✅ BLPOP key [key ...] timeout / BRPOP key [key ...] timeout
- 功能:阻塞式弹出(实现消息队列)
BLPOP queue 5 # 阻塞最多5秒
✅ LRANGE key start stop
- 功能:获取范围元素(支持负索引)
LRANGE news:latest 0 9 # 前10条
✅ LLEN key
- 功能:列表长度
LLEN queue
✅ LINDEX key index
- 功能:获取指定索引元素
LINDEX news:latest 0
✅ LREM key count value
- 功能:删除指定值(count >0 从头删,<0 从尾删,0 全删)
LREM queue 1 "task_1"
✅ LTRIM key start stop
- 功能:修剪列表,只保留指定范围
LTRIM news:latest 0 99 # 只保留前100条
5. Set 命令
✅ SADD key member [member ...]
- 功能:添加元素
SADD tags:article:1 java redis
✅ SMEMBERS key
- 功能:获取所有元素(无序)
SMEMBERS tags:article:1
✅ SISMEMBER key member
- 功能:判断是否为成员
SISMEMBER user:1001:friends 2001
✅ SCARD key
- 功能:集合元素数量
SCARD tags:article:1
✅ SPOP key [count]
- 功能:随机弹出并删除元素
SPOP prize_pool 1
✅ SINTER key [key ...]
- 功能:交集
SINTER user:1001:interests user:2001:interests
✅ SUNION key [key ...]
- 功能:并集
✅ SDIFF key [key ...]
- 功能:差集
✅ SMOVE source dest member
- 功能:移动元素到另一个集合
SMOVE wait_queue done_queue task_1
6. Sorted Set(ZSet)命令
✅ ZADD key score member [score member ...]
- 功能:添加带分值的元素
ZADD leaderboard 1000 "Alice"
✅ ZRANGE key start stop [WITHSCORES]
- 功能:升序获取范围
ZRANGE leaderboard 0 -1 WITHSCORES
✅ ZREVRANGE key start stop [WITHSCORES]
- 功能:降序获取(排行榜常用)
ZREVRANGE leaderboard 0 9 WITHSCORES
✅ ZRANK key member / ZREVRANK key member
- 功能:获取排名(从0开始)
✅ ZSCORE key member
- 功能:获取分数
✅ ZINCRBY key increment member
- 功能:增加分数
ZINCRBY leaderboard 10 "Alice"
✅ ZCOUNT key min max
- 功能:统计分数范围内成员数
ZCOUNT leaderboard 900 1000
✅ ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
- 功能:按分数范围查询
ZRANGEBYSCORE delay_queue -inf 1712345678
✅ ZREM key member [member ...]
- 功能:删除成员
✅ ZCARD key
- 功能:元素总数
7. Stream 命令(消息队列)
✅ XADD stream * field value [field value ...]
- 功能:添加消息(
*自动生成 ID)XADD mystream * name Alice action login
✅ XREAD [COUNT n] [BLOCK ms] STREAMS stream ID
- 功能:读取消息
XREAD COUNT 5 STREAMS mystream 0 XREAD BLOCK 5000 STREAMS mystream $
✅ XGROUP CREATE stream group $ [MKSTREAM]
- 功能:创建消费者组
XGROUP CREATE mystream mygroup $ MKSTREAM
✅ XREADGROUP GROUP group consumer STREAMS stream >
- 功能:消费者组消费
XREADGROUP GROUP mygroup consumer1 STREAMS mystream >
✅ XACK stream group ID [ID ...]
- 功能:确认消息处理完成
✅ XTRIM stream MAXLEN ~ count
- 功能:裁剪流长度(防止无限增长)
XTRIM mystream MAXLEN ~ 1000
✅ XINFO / XPENDING
- 功能:查看流信息和待处理消息
8. 事务与脚本
✅ MULTI
- 功能:开启事务
✅ EXEC
- 功能:执行事务块
✅ DISCARD
- 功能:取消事务
✅ WATCH key [key ...]
- 功能:监视 key,事务期间被修改则取消执行
✅ UNWATCH
- 功能:取消监视
✅ EVAL script numkeys key [key ...] arg [arg ...]
- 功能:执行 Lua 脚本
EVAL "return redis.call('GET', KEYS[1])" 1 user:1001
✅ EVALSHA sha1 ...
- 功能:执行已缓存的脚本(提高性能)
9. 持久化控制
✅ SAVE
- 功能:同步保存 RDB(阻塞)
✅ BGSAVE
- 功能:后台保存 RDB(推荐)
✅ BGREWRITEAOF
- 功能:重写 AOF 文件(压缩)
✅ LASTSAVE
- 功能:上次成功保存时间(Unix 时间戳)
✅ SHUTDOWN [SAVE|NOSAVE]
- 功能:关闭 Redis 服务
10. 服务器管理
✅ INFO [section]
- 功能:查看服务器信息
INFO memory # 内存使用 INFO replication # 主从状态 INFO cpu
✅ CONFIG GET parameter / CONFIG SET parameter value
- 功能:获取/设置运行时配置
CONFIG GET maxmemory CONFIG SET loglevel "verbose"
✅ CLIENT LIST
- 功能:查看客户端连接
✅ CLIENT KILL addr
- 功能:断开客户端连接
✅ TIME
- 功能:获取服务器时间
✅ DBSIZE
- 功能:当前数据库 key 数量
✅ FLUSHDB / FLUSHALL
- 功能:清空当前库 / 所有库(慎用!)
三、常用组合命令与技巧
| 场景 | 推荐命令组合 |
|---|---|
| 分布式锁 | SET key value NX EX 10 + Lua 释放 |
| 延迟队列 | ZADD delay_queue timestamp task + 定时 ZRANGEBYSCORE |
| 限流(滑动窗口) | ZADD requests timestamp ip + ZREMRANGEBYSCORE + ZCARD |
| 消息广播 | PUBLISH channel msg + SUBSCRIBE channel |
| 批量操作 | Pipeline + 多条命令 |
| 原子操作 | EVAL Lua 脚本 |
四、最佳实践建议
- 避免使用
KEYS *→ 改用SCAN - 大 key 操作要小心 → 使用
UNLINK替代DEL(异步删除) - 设置合理的过期时间 → 防止内存泄漏
- 使用 Pipeline 批量操作 → 减少网络往返
- 监控慢查询 →
SLOWLOG GET 10 - 生产环境关闭
FLUSHALL→ 通过rename-command禁用 - 定期分析大 key →
redis-cli --bigkeys
五、总结:Redis 命令使用口诀
🔹 读写用对结构:String 缓存,Hash 存对象,List 做队列,Set 去重,ZSet 排行榜
🔹 操作注意原子:单命令天然原子,复杂逻辑用 Lua
🔹 过期必设 TTL:防止内存无限增长
🔹 大 key 要分片:避免阻塞主线程
🔹 监控不可少:INFO、慢日志、内存分析
✅ 结语:
掌握 Redis 命令不仅是“会用”,更是“用好”。理解每个命令的语义、性能特征和适用场景,才能在高并发、低延迟的系统中游刃有余。建议结合 redis-cli 实践操作,加深记忆。
📚 官方文档:https://redis.io/commands
Redis 命令大全详解与实战建议
1933

被折叠的 条评论
为什么被折叠?



