Redis常用命令速查表
一、基础核心类型常用命令
| 数据类型 | 命令 | 核心作用 |
|---|---|---|
| String | SET | 设置key-value对,支持过期时间(EX/PX)、存在性判断(NX/XX)等参数 |
| GET | 获取指定key的value | |
| SETEX | 原子设置key-value对并指定秒级过期时间 | |
| SETNX | 仅在key不存在时设置value(分布式锁核心) | |
| INCR | 将key的整数值自增1 | |
| DECR | 将key的整数值自减1 | |
| INCRBY | 将key的整数值自增指定步长 | |
| MSET | 原子批量设置多个key-value对 | |
| MGET | 批量获取多个key的value | |
| APPEND | 在key的value末尾追加字符串 | |
| STRLEN | 获取key的value长度 | |
| List | LPUSH | 在列表头部(左侧)插入一个或多个元素 |
| RPUSH | 在列表尾部(右侧)插入一个或多个元素 | |
| LPOP | 移除并返回列表头部(左侧)元素 | |
| RPOP | 移除并返回列表尾部(右侧)元素 | |
| LRANGE | 获取列表指定索引范围的元素(0为头,-1为尾) | |
| LINDEX | 获取列表指定索引位置的元素 | |
| LLEN | 获取列表的元素个数 | |
| LTRIM | 修剪列表,仅保留指定索引范围的元素 | |
| BLPOP | 阻塞式移除并返回列表头部元素,支持超时等待 | |
| BRPOP | 阻塞式移除并返回列表尾部元素,支持超时等待 | |
| RPOPLPUSH | 原子将一个列表尾部元素移到另一个列表头部 | |
| Hash | HSET | 设置哈希表中指定field的value(支持多field) |
| HGET | 获取哈希表中指定field的value | |
| HMSET | 批量设置哈希表中多个field-value对 | |
| HMGET | 批量获取哈希表中多个field的value | |
| HGETALL | 获取哈希表中所有field-value对 | |
| HKEYS | 获取哈希表中所有field | |
| HVALS | 获取哈希表中所有value | |
| HINCRBY | 将哈希表中指定field的整数值自增指定步长 | |
| HEXISTS | 判断哈希表中是否存在指定field | |
| HDEL | 删除哈希表中一个或多个field | |
| HLEN | 获取哈希表中field的数量 | |
| Set | SADD | 向集合中添加一个或多个元素 |
| SREM | 从集合中删除一个或多个元素 | |
| SISMEMBER | 判断元素是否在集合中 | |
| SMEMBERS | 获取集合中所有元素 | |
| SCARD | 获取集合的元素个数 | |
| SINTER | 获取多个集合的交集 | |
| SUNION | 获取多个集合的并集 | |
| SDIFF | 获取第一个集合与其他集合的差集 | |
| SRANDMEMBER | 随机获取集合中一个或多个元素(不删除) | |
| SPOP | 随机移除并返回集合中一个或多个元素 | |
| ZSet | ZADD | 向有序集合中添加一个或多个元素及其score |
| ZREM | 从有序集合中删除一个或多个元素 | |
| ZRANGE | 获取有序集合按score从小到大排序的指定索引范围元素 | |
| ZREVRANGE | 获取有序集合按score从大到小排序的指定索引范围元素 | |
| ZRANGEBYSCORE | 获取有序集合中score在指定范围内的元素(从小到大) | |
| ZREVRANGEBYSCORE | 获取有序集合中score在指定范围内的元素(从大到小) | |
| ZRANK | 获取元素按score从小到大排序的排名(0为最小) | |
| ZREVRANK | 获取元素按score从大到小排序的排名(0为最大) | |
| ZINCRBY | 将有序集合中指定元素的score自增指定步长 | |
| ZCARD | 获取有序集合的元素个数 | |
| ZCOUNT | 获取有序集合中score在指定范围内的元素个数 |
二、其他类型常用命令
除了基础核心类型的专属命令外,Redis 还有大量跨数据类型、运维管理、功能增强类的常用命令,以下是核心补充:
| 命令分类 | 命令 | 核心作用 |
|---|---|---|
| 全局键操作 | DEL | 删除一个或多个 key |
| EXISTS | 判断一个或多个 key 是否存在 | |
| EXPIRE | 为 key 设置秒级过期时间 | |
| PEXPIRE | 为 key 设置毫秒级过期时间 | |
| TTL | 查看 key 的剩余秒级过期时间(-1 永久,-2 已过期) | |
| PTTL | 查看 key 的剩余毫秒级过期时间 | |
| PERSIST | 移除 key 的过期时间,使其永久有效 | |
| KEYS | 查找所有匹配 pattern 的 key(线上环境严禁使用,会阻塞 Redis) | |
| SCAN | 增量迭代数据库中的 key,无阻塞替代 KEYS | |
| RENAME | 原子重命名 key(若新 key 已存在则覆盖) | |
| RENAMENX | 仅在新 key 不存在时重命名 | |
| TYPE | 查看 key 对应 value 的数据类型 | |
| OBJECT | 查看 key 的内部编码、引用计数、LRU 时间等底层信息 | |
| 数据库管理 | SELECT | 切换到指定数据库(Redis 默认 0-15 共 16 个库) |
| DBSIZE | 查看当前数据库的 key 总数 | |
| FLUSHDB | 清空当前数据库的所有 key(慎用) | |
| FLUSHALL | 清空所有数据库的所有 key(极度慎用) | |
| 事务与 Lua 脚本 | MULTI | 开启事务块,后续命令入队不执行 |
| EXEC | 原子执行事务块中的所有命令 | |
| DISCARD | 取消事务,清空事务队列 | |
| WATCH | 监控一个或多个 key,若事务执行前 key 被修改则事务中断(乐观锁) | |
| UNWATCH | 取消对所有 key 的监控 | |
| EVAL | 直接执行 Lua 脚本 | |
| EVALSHA | 通过脚本 SHA1 校验和执行已缓存的 Lua 脚本,节省带宽 | |
| SCRIPT LOAD | 将 Lua 脚本加载到缓存但不执行 | |
| SCRIPT FLUSH | 清空 Lua 脚本缓存 | |
| 发布订阅 | PUBLISH | 向指定频道发布消息 |
| SUBSCRIBE | 订阅一个或多个指定频道 | |
| UNSUBSCRIBE | 取消订阅一个或多个指定频道 | |
| PSUBSCRIBE | 订阅所有匹配 pattern 的频道(模式订阅) | |
| PUNSUBSCRIBE | 取消订阅所有匹配 pattern 的频道 | |
| 持久化 | SAVE | 同步执行 RDB 持久化(会阻塞 Redis,线上慎用) |
| BGSAVE | 后台异步执行 RDB 持久化 | |
| LASTSAVE | 查看最后一次成功执行 RDB 持久化的时间戳 | |
| BGREWRITEAOF | 后台异步重写 AOF 文件,压缩体积 | |
| 配置与监控 | INFO | 查看 Redis 服务器的各类信息(内存、CPU、复制、集群等,可加参数如 INFO memory) |
| CONFIG GET | 获取 Redis 配置文件的指定参数值 | |
| CONFIG SET | 动态修改 Redis 配置参数(无需重启,部分参数不支持) | |
| CONFIG REWRITE | 将当前配置重写回 redis.conf 配置文件 | |
| SLOWLOG GET | 获取慢查询日志(可指定条数) | |
| SLOWLOG LEN | 获取慢查询日志的条数 | |
| SLOWLOG RESET | 清空慢查询日志 | |
| TIME | 获取 Redis 服务器的当前时间戳(秒+微秒) | |
| PING | 测试与 Redis 服务器的连接,返回 PONG | |
| 客户端管理 | CLIENT LIST | 查看所有连接到 Redis 的客户端信息 |
| CLIENT KILL | 关闭指定的客户端连接 | |
| CLIENT GETNAME | 获取当前连接的名称 | |
| CLIENT SETNAME | 为当前连接设置名称,便于排查问题 | |
| 其他实用 | DUMP | 序列化指定 key 并返回序列化后的内容 |
| RESTORE | 将 DUMP 序列化的内容恢复为 key | |
| MIGRATE | 原子将 key 从当前 Redis 实例迁移到另一个实例 | |
| WAIT | 阻塞等待当前写命令被至少 N 个从节点同步 |
Redis 常用命令-具体命令行使用示例
一、基础核心类型常用命令示例
一、String(字符串)
| 命令 | 业务场景 | 命令行示例 |
|---|---|---|
| SET | 存储用户ID为1001的JSON信息 | SET user:1001 '{"name":"张三","age":25,"city":"广州"}' |
分布式锁:仅在lock:order:123不存在时设置,30秒自动过期 |
SET lock:order:123 "locked" NX PX 30000 |
|
| GET | 读取用户ID为1001的信息 | GET user:1001 |
| SETEX | 存储验证码code:login:13800138000,180秒(3分钟)过期 |
SETEX code:login:13800138000 180 "8888" |
| SETNX | 幂等性控制:仅在idempotent:pay:20240501001不存在时设置 |
SETNX idempotent:pay:20240501001 "processed" |
| INCR | 文章ID为2001的阅读量+1 | INCR article:2001:views |
| DECR | 商品ID为3001的库存-1 | DECR product:3001:stock |
| INCRBY | 用户ID为1001的积分+100 | INCRBY user:1001:points 100 |
| MSET | 批量预热商品缓存:同时设置product:2001和product:2002 |
MSET product:2001 '{"name":"iPhone","price":5999}' product:2002 '{"name":"MacBook","price":9999}' |
| MGET | 批量读取用户信息:同时获取user:1001和user:1002 |
MGET user:1001 user:1002 |
| APPEND | 在log:20240501末尾追加日志内容 |
APPEND log:20240501 " [INFO] User login successful" |
| STRLEN | 查看user:1001的value长度 |
STRLEN user:1001 |
二、List(列表)
| 命令 | 业务场景 | 命令行示例 |
|---|---|---|
| LPUSH | 栈结构:向stack:task头部压入任务(LPUSH+LPOP实现栈) |
LPUSH stack:task "task1" "task2" "task3" |
| RPUSH | 队列结构:向queue:order尾部加入订单(LPUSH+RPOP实现队列) |
RPUSH queue:order "order:1001" "order:1002" "order:1003" |
| LPOP | 从queue:order头部消费一个订单 |
LPOP queue:order |
| RPOP | 从stack:task尾部弹出一个任务 |
RPOP stack:task |
| LRANGE | 分页查询消息列表:获取message:list的前10条(0-9) |
LRANGE message:list 0 9 |
获取message:list的所有元素(线上长列表禁用) |
LRANGE message:list 0 -1 |
|
| LINDEX | 获取message:list索引为5的元素 |
LINDEX message:list 5 |
| LLEN | 查看queue:order的待处理订单数 |
LLEN queue:order |
| LTRIM | 修剪message:list,仅保留最新的100条(0-99) |
LTRIM message:list 0 99 |
| BLPOP | 阻塞式消费任务:永久等待task:queue,直到有任务可消费 |
BLPOP task:queue 0 |
| 阻塞式消费任务:最多等待30秒,超时返回nil | BLPOP task:queue 30 |
|
| BRPOP | 阻塞式从尾部消费task:queue |
BRPOP task:queue 0 |
| RPOPLPUSH | 原子将queue:order的尾部订单移到processing:order头部(可靠消费模式) |
RPOPLPUSH queue:order processing:order |
三、Hash(哈希)
| 命令 | 业务场景 | 命令行示例 |
|---|---|---|
| HSET | 存储用户ID为1001的字段:name=张三,age=25 | HSET user:1001 name "张三" age 25 |
| 更新用户ID为1001的age字段为26 | HSET user:1001 age 26 |
|
| HGET | 读取用户ID为1001的name字段 | HGET user:1001 name |
| HMSET | 批量设置用户ID为1002的字段(Redis4.0+推荐用HSET替代) | HMSET user:1002 name "李四" city "深圳" email "lisi@example.com" |
| HMGET | 批量读取用户ID为1001的name、age、city字段 | HMGET user:1001 name age city |
| HGETALL | 读取用户ID为1001的所有字段(线上大Hash禁用) | HGETALL user:1001 |
| HKEYS | 获取用户ID为1001的所有field | HKEYS user:1001 |
| HVALS | 获取用户ID为1001的所有value | HVALS user:1001 |
| HINCRBY | 购物车:用户1001的商品2001数量+1 | HINCRBY cart:1001 product:2001 1 |
| 购物车:用户1001的商品2001数量-2 | HINCRBY cart:1001 product:2001 -2 |
|
| HEXISTS | 判断用户ID为1001的字段email是否存在 | HEXISTS user:1001 email |
| HDEL | 删除用户ID为1001的age字段 | HDEL user:1001 age |
| 清空购物车:删除用户1001的商品2001和2002 | HDEL cart:1001 product:2001 product:2002 |
|
| HLEN | 统计购物车:用户1001的商品种类数 | HLEN cart:1001 |
四、Set(集合)
| 命令 | 业务场景 | 命令行示例 |
|---|---|---|
| SADD | 点赞:用户1001点赞文章2001 | SADD like:article:2001 1001 |
| 标签:给文章2001添加“Redis”“缓存”“数据库”标签 | SADD tag:article:2001 "Redis" "缓存" "数据库" |
|
| SREM | 取消点赞:用户1001取消点赞文章2001 | SREM like:article:2001 1001 |
| SISMEMBER | 判断用户1001是否点赞文章2001 | SISMEMBER like:article:2001 1001 |
| SMEMBERS | 获取文章2001的所有点赞用户(线上大Set禁用) | SMEMBERS like:article:2001 |
| SCARD | 统计文章2001的点赞数 | SCARD like:article:2001 |
| SINTER | 共同好友:获取用户1001和1002的共同好友 | SINTER friend:1001 friend:1002 |
| 标签交集:筛选同时有“Redis”和“缓存”标签的文章 | SINTER tag:article:2001 tag:article:2002 |
|
| SUNION | 合并好友:获取用户1001和1002的所有好友(去重) | SUNION friend:1001 friend:1002 |
| SDIFF | 潜在好友:获取用户1001有但1002没有的好友 | SDIFF friend:1001 friend:1002 |
| SRANDMEMBER | 随机抽奖:从lottery:users中随机抽取1个不重复用户 |
SRANDMEMBER lottery:users 1 |
随机推荐:从lottery:users中随机抽取3个可重复用户 |
SRANDMEMBER lottery:users -3 |
|
| SPOP | 随机抽奖(不重复):从lottery:users中随机移除并返回1个用户 |
SPOP lottery:users 1 |
五、ZSet(有序集合)
| 命令 | 业务场景 | 命令行示例 |
|---|---|---|
| ZADD | 排行榜:初始化用户积分(张三100分,李四200分,王五150分) | ZADD rank:score 100 "张三" 200 "李四" 150 "王五" |
| 仅添加新用户:添加赵六120分(若已存在则忽略) | ZADD rank:score NX 120 "赵六" |
|
| ZREM | 移除排行榜中的“赵六” | ZREM rank:score "赵六" |
| ZRANGE | 分页查询排行榜:按积分从小到大获取前3名(0-2) | ZRANGE rank:score 0 2 |
| 分页查询排行榜:按积分从小到大获取前3名,同时返回积分 | ZRANGE rank:score 0 2 WITHSCORES |
|
| ZREVRANGE | 分页查询排行榜:按积分从大到小获取前3名(热门榜) | ZREVRANGE rank:score 0 2 WITHSCORES |
| ZRANGEBYSCORE | 延迟队列:获取score(执行时间戳)在0到当前时间之间的到期任务 | ZRANGEBYSCORE delay:queue 0 1714500000 |
| 积分筛选:获取积分在100到200之间的用户(闭区间) | ZRANGEBYSCORE rank:score 100 200 WITHSCORES |
|
| 积分筛选:获取积分大于100且小于200的用户(开区间,用() | ZRANGEBYSCORE rank:score (100 (200 WITHSCORES |
|
| ZREVRANGEBYSCORE | 积分筛选:按积分从大到小获取100到200之间的用户 | ZREVRANGEBYSCORE rank:score 200 100 WITHSCORES |
| ZRANK | 查询张三的排名(按积分从小到大,0为最小) | ZRANK rank:score "张三" |
| ZREVRANK | 查询张三的排名(按积分从大到小,0为最大,即热门榜排名) | ZREVRANK rank:score "张三" |
| ZINCRBY | 积分增加:张三的积分+50 | ZINCRBY rank:score 50 "张三" |
| 积分减少:李四的积分-30 | ZINCRBY rank:score -30 "李四" |
|
| ZCARD | 统计排行榜的总用户数 | ZCARD rank:score |
| ZCOUNT | 统计积分在100到200之间的用户数 | ZCOUNT rank:score 100 200 |
二、其他类型常用命令示例
一、全局键操作
| 命令 | 场景 | 命令行示例 |
|---|---|---|
| DEL | 删除名为 user:1001 的缓存 |
DEL user:1001 |
批量删除 token:abc 和 token:def |
DEL token:abc token:def |
|
| EXISTS | 判断 product:2001 是否存在 |
EXISTS product:2001 |
| EXPIRE | 给 session:xyz 设置 1800 秒(30分钟)过期 |
EXPIRE session:xyz 1800 |
| TTL | 查看 session:xyz 的剩余过期时间 |
TTL session:xyz |
| PERSIST | 移除 session:xyz 的过期时间,使其永久有效 |
PERSIST session:xyz |
| SCAN | 增量迭代当前数据库中所有以 user: 开头的 key(从游标 0 开始,每次返回 10 条) |
SCAN 0 MATCH user:* COUNT 10 |
| TYPE | 查看 cart:1001 的数据类型 |
TYPE cart:1001 |
| OBJECT | 查看 user:1001 的底层编码(如 embstr/hashtable) |
OBJECT ENCODING user:1001 |
⚠️ 线上严禁使用
KEYS *,会全量遍历阻塞 Redis,一律用SCAN替代。
二、数据库管理
| 命令 | 场景 | 命令行示例 |
|---|---|---|
| SELECT | 切换到第 3 号数据库(默认 0-15) | SELECT 3 |
| DBSIZE | 查看当前数据库的 key 总数 | DBSIZE |
| FLUSHDB | 清空当前数据库的所有 key(慎用) | FLUSHDB |
| FLUSHALL | 清空所有 16 个数据库的所有 key(极度慎用) | FLUSHALL |
三、事务与 Lua 脚本
事务
| 命令 | 场景 | 命令行示例 |
|---|---|---|
| MULTI/EXEC | 原子执行“给 user:1001 余额 +100,给 user:1002 余额 -100” |
MULTIINCRBY user:1001:balance 100DECRBY user:1002:balance 100EXEC |
| DISCARD | 开启事务后取消,清空队列 | MULTIINCR counterDISCARD |
| WATCH | 监控 stock:2001,若事务执行前被修改则中断(乐观锁) |
WATCH stock:2001MULTIDECR stock:2001EXEC |
Lua 脚本
| 命令 | 场景 | 命令行示例 |
|---|---|---|
| EVAL | 执行简单 Lua 脚本:原子将 counter 自增 1 并返回新值 |
EVAL "return redis.call('INCR', KEYS[1])" 1 counter |
| EVALSHA | 先加载脚本再通过 SHA1 执行(节省带宽) | SCRIPT LOAD "return redis.call('INCR', KEYS[1])" (假设返回 SHA1: a123...)EVALSHA a123... 1 counter |
四、发布订阅
| 命令 | 场景 | 命令行示例 |
|---|---|---|
| PUBLISH | 向 news:tech 频道发布消息“Redis 7.0 发布” |
PUBLISH news:tech "Redis 7.0 发布" |
| SUBSCRIBE | 订阅 news:tech 频道(阻塞式,收到消息会自动打印) |
SUBSCRIBE news:tech |
| PSUBSCRIBE | 模式订阅所有以 news: 开头的频道 |
PSUBSCRIBE news:* |
五、持久化
| 命令 | 场景 | 命令行示例 |
|---|---|---|
| BGSAVE | 后台异步生成 RDB 快照(不阻塞 Redis) | BGSAVE |
| BGREWRITEAOF | 后台异步重写 AOF 文件,压缩体积 | BGREWRITEAOF |
| LASTSAVE | 查看最后一次 RDB 快照成功的时间戳 | LASTSAVE |
六、配置与监控
| 命令 | 场景 | 命令行示例 |
|---|---|---|
| INFO | 查看 Redis 内存使用详情 | INFO memory |
| 查看 Redis 主从复制信息 | INFO replication |
|
| CONFIG GET | 获取当前 maxmemory(最大内存)配置 |
CONFIG GET maxmemory |
| CONFIG SET | 动态设置 slowlog-log-slower-than(慢查询阈值,单位微秒)为 10000(10ms) |
CONFIG SET slowlog-log-slower-than 10000 |
| SLOWLOG GET | 获取最近 5 条慢查询日志 | SLOWLOG GET 5 |
| SLOWLOG RESET | 清空慢查询日志 | SLOWLOG RESET |
| PING | 测试与 Redis 的连接 | PING |
七、客户端管理
| 命令 | 场景 | 命令行示例 |
|---|---|---|
| CLIENT SETNAME | 为当前连接设置名称“my-app-connection”,便于排查问题 | CLIENT SETNAME my-app-connection |
| CLIENT LIST | 查看所有连接到 Redis 的客户端信息 | CLIENT LIST |
| CLIENT GETNAME | 获取当前连接的名称 | CLIENT GETNAME |
八、其他实用命令
| 命令 | 场景 | 命令行示例 |
|---|---|---|
| DUMP | 序列化 user:1001 并打印结果 |
DUMP user:1001 |
| RESTORE | 将 DUMP 序列化的内容恢复为 user:1001-backup(TTL 0 表示永久) |
RESTORE user:1001-backup 0 "<序列化内容>" |