Redis 命令大全详解(全面、系统、实战导向)

Redis 命令大全详解与实战建议

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消息队列、事件流
🔐 事务与脚本~5MULTI/EXEC、Lua 脚本
🔁 持久化控制~5RDB/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 脚本

四、最佳实践建议

  1. 避免使用 KEYS * → 改用 SCAN
  2. 大 key 操作要小心 → 使用 UNLINK 替代 DEL(异步删除)
  3. 设置合理的过期时间 → 防止内存泄漏
  4. 使用 Pipeline 批量操作 → 减少网络往返
  5. 监控慢查询SLOWLOG GET 10
  6. 生产环境关闭 FLUSHALL → 通过 rename-command 禁用
  7. 定期分析大 keyredis-cli --bigkeys

五、总结:Redis 命令使用口诀

🔹 读写用对结构:String 缓存,Hash 存对象,List 做队列,Set 去重,ZSet 排行榜
🔹 操作注意原子:单命令天然原子,复杂逻辑用 Lua
🔹 过期必设 TTL:防止内存无限增长
🔹 大 key 要分片:避免阻塞主线程
🔹 监控不可少:INFO、慢日志、内存分析


结语
掌握 Redis 命令不仅是“会用”,更是“用好”。理解每个命令的语义、性能特征和适用场景,才能在高并发、低延迟的系统中游刃有余。建议结合 redis-cli 实践操作,加深记忆。

📚 官方文档:https://redis.io/commands

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值