Redis 常用命令速查
这篇笔记用于快速回忆 Redis 常用命令。内容按命令所属模块整理,适合学习、复习和面试前查漏补缺。
Redis 命令很多,不建议一开始死背全部命令。更好的方式是先记住每种数据结构适合解决什么问题,再记常用命令。
日常使用时可以按下面的优先级记忆:
| 优先级 | 内容 |
|---|---|
| 必须熟悉 | Key、String、Hash、List、Set、Sorted Set |
| 经常遇到 | 事务、Lua 脚本、发布订阅、HyperLogLog、Geo |
| 谨慎使用 | KEYS、FLUSHDB、FLUSHALL、MONITOR、DEBUG、SAVE |
| 运维相关 | INFO、CLIENT、CONFIG、SLOWLOG、BGSAVE、ROLE |
生产环境尤其注意:
- 大 key 场景慎用
KEYS,优先使用SCAN。 - 删除大量 key 时要关注阻塞风险。
FLUSHDB、FLUSHALL会清空数据,必须谨慎。MONITOR会输出所有命令,流量大时可能影响性能。DEBUG SEGFAULT会让 Redis 崩溃,不能在生产环境执行。
Key 命令
Section titled “Key 命令”Key 命令用于管理 Redis 中的键,包括查询、删除、重命名、过期时间和迁移。
| 命令 | 作用 |
|---|---|
TYPE key | 返回 key 存储的值类型 |
EXISTS key [key ...] | 判断一个或多个 key 是否存在 |
DEL key [key ...] | 删除一个或多个 key |
EXPIRE key seconds | 为 key 设置秒级过期时间 |
EXPIREAT key timestamp | 设置 key 在指定秒级 Unix 时间戳过期 |
PEXPIRE key milliseconds | 为 key 设置毫秒级过期时间 |
PEXPIREAT key milliseconds-timestamp | 设置 key 在指定毫秒级 Unix 时间戳过期 |
TTL key | 返回 key 的剩余生存时间,单位秒 |
PTTL key | 返回 key 的剩余生存时间,单位毫秒 |
PERSIST key | 移除 key 的过期时间,使其持久保存 |
RENAME key newkey | 修改 key 名称 |
RENAMENX key newkey | 仅当 newkey 不存在时重命名 |
MOVE key db | 将当前数据库的 key 移动到指定数据库 |
RANDOMKEY | 从当前数据库随机返回一个 key |
DUMP key | 序列化指定 key 的值 |
KEYS pattern | 查找匹配模式的 key,生产环境慎用 |
SCAN cursor [MATCH pattern] [COUNT count] | 增量迭代 key,生产环境更推荐 |
常见示例:
TYPE user:1EXISTS user:1EXPIRE user:1 3600TTL user:1PERSIST user:1DEL user:1SCAN 0 MATCH user:* COUNT 100String 命令
Section titled “String 命令”String 是 Redis 最基础的数据类型,适合缓存普通字符串、JSON、计数器、分布式锁标记等。
| 命令 | 作用 |
|---|---|
| `SET key value [EX seconds] [PX milliseconds] [NX | XX]` |
GET key | 获取 key 的值 |
SETNX key value | 仅当 key 不存在时设置值 |
SETEX key seconds value | 设置值并设置秒级过期时间 |
PSETEX key milliseconds value | 设置值并设置毫秒级过期时间 |
GETSET key value | 设置新值并返回旧值 |
MSET key value [key value ...] | 批量设置多个 key-value |
MGET key [key ...] | 批量获取多个 key 的值 |
MSETNX key value [key value ...] | 所有 key 都不存在时才批量设置 |
INCR key | 将整数值加一 |
INCRBY key increment | 将整数值加指定增量 |
INCRBYFLOAT key increment | 将数字值加指定浮点增量 |
DECR key | 将整数值减一 |
DECRBY key decrement | 将整数值减指定减量 |
APPEND key value | 在字符串末尾追加内容 |
STRLEN key | 返回字符串长度 |
GETRANGE key start end | 获取字符串指定区间 |
SETRANGE key offset value | 从指定偏移量开始覆写字符串 |
GETBIT key offset | 获取指定偏移量的 bit |
SETBIT key offset value | 设置或清除指定偏移量的 bit |
常见示例:
SET user:1 '{"name":"xiaoxi"}' EX 3600GET user:1SET lock:order:1 1 NX EX 10INCR page:viewMSET user:1:name xiaoxi user:1:age 18MGET user:1:name user:1:age现在更常见的分布式锁写法是使用 SET key value NX EX seconds,而不是单独使用 SETNX 后再设置过期时间。
Hash 命令
Section titled “Hash 命令”Hash 适合存储对象结构,比如用户信息、商品信息、配置项。
| 命令 | 作用 |
|---|---|
HSET key field value [field value ...] | 设置一个或多个字段 |
HGET key field | 获取指定字段值 |
HMSET key field value [field value ...] | 批量设置字段,较新版本中通常用 HSET 代替 |
HMGET key field [field ...] | 批量获取字段值 |
HGETALL key | 获取所有字段和值 |
HEXISTS key field | 判断字段是否存在 |
HDEL key field [field ...] | 删除一个或多个字段 |
HLEN key | 获取字段数量 |
HKEYS key | 获取所有字段名 |
HVALS key | 获取所有字段值 |
HINCRBY key field increment | 对字段整数值增加指定增量 |
HINCRBYFLOAT key field increment | 对字段浮点值增加指定增量 |
HSETNX key field value | 字段不存在时才设置 |
常见示例:
HSET user:1 name xiaoxi age 18 city HangzhouHGET user:1 nameHMGET user:1 name ageHGETALL user:1HINCRBY user:1 login_count 1List 命令
Section titled “List 命令”List 是双端链表结构,适合队列、消息列表、时间线等场景。
| 命令 | 作用 |
|---|---|
LPUSH key value [value ...] | 从列表头部插入元素 |
RPUSH key value [value ...] | 从列表尾部插入元素 |
LPOP key | 移除并返回列表头部元素 |
RPOP key | 移除并返回列表尾部元素 |
LINDEX key index | 通过索引获取元素 |
LRANGE key start stop | 获取指定区间元素 |
LLEN key | 获取列表长度 |
LREM key count value | 移除指定元素 |
LTRIM key start stop | 只保留指定区间元素 |
LSET key index value | 通过索引设置元素 |
| `LINSERT key BEFORE | AFTER pivot value` |
LPUSHX key value [value ...] | 仅当列表存在时从头部插入 |
RPUSHX key value [value ...] | 仅当列表存在时从尾部插入 |
BLPOP key [key ...] timeout | 阻塞式弹出头部元素 |
BRPOP key [key ...] timeout | 阻塞式弹出尾部元素 |
RPOPLPUSH source destination | 从 source 尾部弹出并推入 destination 头部 |
BRPOPLPUSH source destination timeout | 阻塞版 RPOPLPUSH |
常见示例:
LPUSH queue:email task1 task2RPOP queue:emailLRANGE queue:email 0 -1LLEN queue:emailBRPOP queue:email 5Set 命令
Section titled “Set 命令”Set 是无序且不重复的集合,适合标签、去重、共同好友、权限集合等场景。
| 命令 | 作用 |
|---|---|
SADD key member [member ...] | 添加一个或多个成员 |
SREM key member [member ...] | 移除一个或多个成员 |
SMEMBERS key | 返回集合所有成员 |
SISMEMBER key member | 判断成员是否存在 |
SCARD key | 获取集合成员数量 |
SPOP key [count] | 移除并返回随机成员 |
SRANDMEMBER key [count] | 随机返回成员,不移除 |
SMOVE source destination member | 将成员从一个集合移动到另一个集合 |
SINTER key [key ...] | 返回多个集合的交集 |
SINTERSTORE destination key [key ...] | 将交集存储到 destination |
SUNION key [key ...] | 返回多个集合的并集 |
SUNIONSTORE destination key [key ...] | 将并集存储到 destination |
SDIFF key [key ...] | 返回多个集合的差集 |
SDIFFSTORE destination key [key ...] | 将差集存储到 destination |
SSCAN key cursor [MATCH pattern] [COUNT count] | 增量迭代集合成员 |
常见示例:
SADD user:1:tags redis mysql backendSISMEMBER user:1:tags redisSMEMBERS user:1:tagsSINTER user:1:tags user:2:tagsSorted Set 命令
Section titled “Sorted Set 命令”Sorted Set 也叫 ZSet,有序集合中的每个成员都有一个 score,适合排行榜、权重排序、延时任务等场景。
| 命令 | 作用 |
|---|---|
ZADD key score member [score member ...] | 添加成员或更新成员分数 |
ZREM key member [member ...] | 移除一个或多个成员 |
ZCARD key | 获取成员数量 |
ZSCORE key member | 获取成员分数 |
ZINCRBY key increment member | 增加成员分数 |
ZRANK key member | 返回成员升序排名 |
ZREVRANK key member | 返回成员降序排名 |
ZRANGE key start stop [WITHSCORES] | 按索引区间返回成员,默认升序 |
ZREVRANGE key start stop [WITHSCORES] | 按索引区间返回成员,降序 |
ZRANGEBYSCORE key min max [WITHSCORES] | 按分数区间返回成员 |
ZREVRANGEBYSCORE key max min [WITHSCORES] | 按分数区间返回成员,降序 |
ZCOUNT key min max | 统计分数区间内成员数量 |
ZREMRANGEBYRANK key start stop | 按排名区间移除成员 |
ZREMRANGEBYSCORE key min max | 按分数区间移除成员 |
ZRANGEBYLEX key min max | 按字典区间返回成员 |
ZLEXCOUNT key min max | 统计字典区间成员数量 |
ZREMRANGEBYLEX key min max | 按字典区间移除成员 |
ZUNIONSTORE destination numkeys key [key ...] | 计算并集并存储 |
ZINTERSTORE destination numkeys key [key ...] | 计算交集并存储 |
ZSCAN key cursor [MATCH pattern] [COUNT count] | 增量迭代成员和分数 |
常见示例:
ZADD rank:article 100 article:1 200 article:2ZREVRANGE rank:article 0 9 WITHSCORESZINCRBY rank:article 1 article:1ZRANK rank:article article:1连接命令用于测试连接、鉴权和切换数据库。
| 命令 | 作用 |
|---|---|
PING | 检查服务是否可用 |
ECHO message | 打印字符串 |
AUTH password | 验证密码 |
SELECT index | 切换数据库 |
QUIT | 关闭当前连接 |
常见示例:
PINGAUTH your-passwordSELECT 1ECHO helloQUIT服务器命令多用于运维、调试、持久化和配置管理。生产环境执行前要确认影响范围。
| 命令 | 作用 |
|---|---|
INFO [section] | 获取 Redis 服务器信息和统计数据 |
DBSIZE | 返回当前数据库 key 数量 |
TIME | 返回服务器当前时间 |
LASTSAVE | 返回最近一次成功保存到磁盘的时间 |
SAVE | 同步保存 RDB,可能阻塞 Redis |
BGSAVE | 后台异步保存 RDB |
BGREWRITEAOF | 后台异步重写 AOF 文件 |
FLUSHDB | 删除当前数据库所有 key,危险命令 |
FLUSHALL | 删除所有数据库所有 key,危险命令 |
SLOWLOG GET [count] | 查看慢日志 |
CONFIG GET parameter | 获取配置参数 |
CONFIG SET parameter value | 修改配置参数 |
CONFIG RESETSTAT | 重置统计信息 |
CONFIG REWRITE | 重写配置文件 |
CLIENT LIST | 获取客户端连接列表 |
CLIENT GETNAME | 获取当前连接名称 |
CLIENT SETNAME name | 设置当前连接名称 |
CLIENT KILL | 关闭客户端连接 |
CLIENT PAUSE timeout | 暂停处理客户端命令 |
COMMAND | 获取 Redis 命令详情 |
COMMAND COUNT | 获取命令总数 |
COMMAND INFO command [command ...] | 获取指定命令信息 |
COMMAND GETKEYS | 获取命令涉及的 key |
ROLE | 返回当前实例角色 |
REPLICAOF host port | 将当前服务器变为指定主库的从库 |
SLAVEOF host port | 旧命令,功能类似 REPLICAOF |
CLUSTER SLOTS | 获取集群槽位映射 |
MONITOR | 实时打印服务器收到的命令,调试用,生产慎用 |
SHUTDOWN | 保存数据并关闭服务器 |
SYNC | 复制内部命令,普通业务不直接使用 |
DEBUG OBJECT key | 获取 key 调试信息 |
DEBUG SEGFAULT | 让 Redis 崩溃,极危险命令 |
常见示例:
INFO memoryDBSIZESLOWLOG GET 10BGSAVECLIENT LISTROLERedis 支持使用 Lua 脚本把多个操作放到服务端一次执行。脚本执行具有原子性,常用于库存扣减、分布式锁释放等场景。
| 命令 | 作用 |
|---|---|
EVAL script numkeys key [key ...] arg [arg ...] | 执行 Lua 脚本 |
EVALSHA sha1 numkeys key [key ...] arg [arg ...] | 通过脚本 SHA1 执行缓存中的脚本 |
SCRIPT LOAD script | 将脚本加载到脚本缓存 |
SCRIPT EXISTS sha1 [sha1 ...] | 判断脚本是否存在于缓存 |
SCRIPT FLUSH | 清空脚本缓存 |
SCRIPT KILL | 终止当前正在运行的 Lua 脚本 |
常见示例:
EVAL "return redis.call('GET', KEYS[1])" 1 user:1SCRIPT LOAD "return redis.call('GET', KEYS[1])"EVALSHA <sha1> 1 user:1Redis 事务可以把多个命令放到一个队列中,最后一起执行。它不等同于关系型数据库事务,不支持复杂回滚。
| 命令 | 作用 |
|---|---|
MULTI | 标记事务开始 |
EXEC | 执行事务队列中的所有命令 |
DISCARD | 取消事务,放弃队列中的命令 |
WATCH key [key ...] | 监视 key,如果被修改则事务执行失败 |
UNWATCH | 取消所有 key 的监视 |
常见示例:
WATCH stock:1MULTIDECR stock:1INCR sold:1EXECHyperLogLog 命令
Section titled “HyperLogLog 命令”HyperLogLog 用于基数统计,适合统计 UV、去重数量等场景。它占用空间小,但结果是估算值。
| 命令 | 作用 |
|---|---|
PFADD key element [element ...] | 添加元素到 HyperLogLog |
PFCOUNT key [key ...] | 返回基数估算值 |
PFMERGE destkey sourcekey [sourcekey ...] | 合并多个 HyperLogLog |
常见示例:
PFADD uv:2026-05-20 user:1 user:2 user:3PFCOUNT uv:2026-05-20PFMERGE uv:total uv:2026-05-19 uv:2026-05-20发布订阅命令
Section titled “发布订阅命令”发布订阅适合简单消息通知。它不保证消息持久化,订阅者离线期间会错过消息。
| 命令 | 作用 |
|---|---|
PUBLISH channel message | 向指定频道发布消息 |
SUBSCRIBE channel [channel ...] | 订阅一个或多个频道 |
UNSUBSCRIBE [channel ...] | 退订频道 |
PSUBSCRIBE pattern [pattern ...] | 按模式订阅频道 |
PUNSUBSCRIBE [pattern ...] | 退订模式频道 |
PUBSUB subcommand [argument ...] | 查看发布订阅状态 |
常见示例:
SUBSCRIBE newsPUBLISH news "hello redis"PSUBSCRIBE news:*PUBSUB CHANNELS如果业务需要可靠消息、确认机制、重试和持久化,通常应该考虑消息队列或 Redis Stream,而不是普通发布订阅。
Geo 命令
Section titled “Geo 命令”Geo 命令用于存储地理位置并进行距离计算、范围搜索。底层使用 Sorted Set 保存位置数据。
| 命令 | 作用 |
|---|---|
GEOADD key longitude latitude member [longitude latitude member ...] | 添加地理位置 |
GEOPOS key member [member ...] | 返回成员经纬度 |
GEODIST key member1 member2 [unit] | 返回两个位置之间的距离 |
GEOHASH key member [member ...] | 返回成员 Geohash |
GEOSEARCH key ... | 按圆形或矩形范围搜索位置,推荐使用 |
GEOSEARCHSTORE destination source ... | 搜索并把结果存储到新 key |
GEORADIUS key longitude latitude radius unit | 已废弃,建议改用 GEOSEARCH |
GEORADIUSBYMEMBER key member radius unit | 已废弃,建议改用 GEOSEARCH |
常见示例:
GEOADD city 120.1551 30.2741 hangzhouGEOADD city 121.4737 31.2304 shanghaiGEODIST city hangzhou shanghai kmGEOPOS city hangzhouGEOSEARCH city FROMMEMBER hangzhou BYRADIUS 200 km WITHDISTRedis 6.2 之后,GEORADIUS 和 GEORADIUSBYMEMBER 已被标记为废弃命令。新代码优先使用 GEOSEARCH 和 GEOSEARCHSTORE。
常用组合场景
Section titled “常用组合场景”| 场景 | 常用命令 |
|---|---|
| 普通缓存 | SET、GET、EXPIRE、TTL |
| 分布式锁基础写法 | SET key value NX EX seconds |
| 用户对象缓存 | HSET、HGET、HMGET、HGETALL |
| 队列 | LPUSH、RPOP、BRPOP |
| 标签去重 | SADD、SISMEMBER、SMEMBERS |
| 排行榜 | ZADD、ZREVRANGE、ZINCRBY |
| 延时任务 | ZADD、ZRANGEBYSCORE、ZREM |
| UV 估算 | PFADD、PFCOUNT |
| 附近的人 | GEOADD、GEOSEARCH、GEODIST |
| 原子组合操作 | EVAL、EVALSHA |