【Redis】Redis常用命令速查表(完整版)

25 阅读16分钟

Redis常用命令速查表


一、基础核心类型常用命令

数据类型命令核心作用
StringSET设置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长度
ListLPUSH在列表头部(左侧)插入一个或多个元素
RPUSH在列表尾部(右侧)插入一个或多个元素
LPOP移除并返回列表头部(左侧)元素
RPOP移除并返回列表尾部(右侧)元素
LRANGE获取列表指定索引范围的元素(0为头,-1为尾)
LINDEX获取列表指定索引位置的元素
LLEN获取列表的元素个数
LTRIM修剪列表,仅保留指定索引范围的元素
BLPOP阻塞式移除并返回列表头部元素,支持超时等待
BRPOP阻塞式移除并返回列表尾部元素,支持超时等待
RPOPLPUSH原子将一个列表尾部元素移到另一个列表头部
HashHSET设置哈希表中指定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的数量
SetSADD向集合中添加一个或多个元素
SREM从集合中删除一个或多个元素
SISMEMBER判断元素是否在集合中
SMEMBERS获取集合中所有元素
SCARD获取集合的元素个数
SINTER获取多个集合的交集
SUNION获取多个集合的并集
SDIFF获取第一个集合与其他集合的差集
SRANDMEMBER随机获取集合中一个或多个元素(不删除)
SPOP随机移除并返回集合中一个或多个元素
ZSetZADD向有序集合中添加一个或多个元素及其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的阅读量+1INCR article:2001:views
DECR商品ID为3001的库存-1DECR product:3001:stock
INCRBY用户ID为1001的积分+100INCRBY user:1001:points 100
MSET批量预热商品缓存:同时设置product:2001product:2002MSET product:2001 '{"name":"iPhone","price":5999}' product:2002 '{"name":"MacBook","price":9999}'
MGET批量读取用户信息:同时获取user:1001user:1002MGET user:1001 user:1002
APPENDlog: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"
LPOPqueue:order头部消费一个订单LPOP queue:order
RPOPstack: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秒,超时返回nilBLPOP task:queue 30
BRPOP阻塞式从尾部消费task:queueBRPOP task:queue 0
RPOPLPUSH原子将queue:order的尾部订单移到processing:order头部(可靠消费模式)RPOPLPUSH queue:order processing:order

三、Hash(哈希)

命令业务场景命令行示例
HSET存储用户ID为1001的字段:name=张三,age=25HSET user:1001 name "张三" age 25
更新用户ID为1001的age字段为26HSET 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的所有fieldHKEYS user:1001
HVALS获取用户ID为1001的所有valueHVALS user:1001
HINCRBY购物车:用户1001的商品2001数量+1HINCRBY cart:1001 product:2001 1
购物车:用户1001的商品2001数量-2HINCRBY cart:1001 product:2001 -2
HEXISTS判断用户ID为1001的字段email是否存在HEXISTS user:1001 email
HDEL删除用户ID为1001的age字段HDEL user:1001 age
清空购物车:删除用户1001的商品2001和2002HDEL cart:1001 product:2001 product:2002
HLEN统计购物车:用户1001的商品种类数HLEN cart:1001

四、Set(集合)

命令业务场景命令行示例
SADD点赞:用户1001点赞文章2001SADD like:article:2001 1001
标签:给文章2001添加“Redis”“缓存”“数据库”标签SADD tag:article:2001 "Redis" "缓存" "数据库"
SREM取消点赞:用户1001取消点赞文章2001SREM like:article:2001 1001
SISMEMBER判断用户1001是否点赞文章2001SISMEMBER 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积分增加:张三的积分+50ZINCRBY rank:score 50 "张三"
积分减少:李四的积分-30ZINCRBY rank:score -30 "李四"
ZCARD统计排行榜的总用户数ZCARD rank:score
ZCOUNT统计积分在100到200之间的用户数ZCOUNT rank:score 100 200


二、其他类型常用命令示例


一、全局键操作

命令场景命令行示例
DEL删除名为 user:1001 的缓存DEL user:1001
批量删除 token:abctoken:defDEL token:abc token:def
EXISTS判断 product:2001 是否存在EXISTS product:2001
EXPIREsession: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/hashtableOBJECT 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”MULTI
INCRBY user:1001:balance 100
DECRBY user:1002:balance 100
EXEC
DISCARD开启事务后取消,清空队列MULTI
INCR counter
DISCARD
WATCH监控 stock:2001,若事务执行前被修改则中断(乐观锁)WATCH stock:2001
MULTI
DECR stock:2001
EXEC

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

四、发布订阅

命令场景命令行示例
PUBLISHnews: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 "<序列化内容>"