跳转到内容

Redis 常用命令速查

建议学习 40-60 分钟更新于 2026/5/20

这篇笔记用于快速回忆 Redis 常用命令。内容按命令所属模块整理,适合学习、复习和面试前查漏补缺。

Redis 命令很多,不建议一开始死背全部命令。更好的方式是先记住每种数据结构适合解决什么问题,再记常用命令。

日常使用时可以按下面的优先级记忆:

优先级内容
必须熟悉Key、String、Hash、List、Set、Sorted Set
经常遇到事务、Lua 脚本、发布订阅、HyperLogLog、Geo
谨慎使用KEYSFLUSHDBFLUSHALLMONITORDEBUGSAVE
运维相关INFOCLIENTCONFIGSLOWLOGBGSAVEROLE

生产环境尤其注意:

  • 大 key 场景慎用 KEYS,优先使用 SCAN
  • 删除大量 key 时要关注阻塞风险。
  • FLUSHDBFLUSHALL 会清空数据,必须谨慎。
  • MONITOR 会输出所有命令,流量大时可能影响性能。
  • DEBUG SEGFAULT 会让 Redis 崩溃,不能在生产环境执行。

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,生产环境更推荐

常见示例:

key-commands.sh
TYPE user:1
EXISTS user:1
EXPIRE user:1 3600
TTL user:1
PERSIST user:1
DEL user:1
SCAN 0 MATCH user:* COUNT 100

String 是 Redis 最基础的数据类型,适合缓存普通字符串、JSON、计数器、分布式锁标记等。

命令作用
`SET key value [EX seconds] [PX milliseconds] [NXXX]`
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

常见示例:

string-commands.sh
SET user:1 '{"name":"xiaoxi"}' EX 3600
GET user:1
SET lock:order:1 1 NX EX 10
INCR page:view
MSET user:1:name xiaoxi user:1:age 18
MGET user:1:name user:1:age

现在更常见的分布式锁写法是使用 SET key value NX EX seconds,而不是单独使用 SETNX 后再设置过期时间。

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字段不存在时才设置

常见示例:

hash-commands.sh
HSET user:1 name xiaoxi age 18 city Hangzhou
HGET user:1 name
HMGET user:1 name age
HGETALL user:1
HINCRBY user:1 login_count 1

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 BEFOREAFTER 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

常见示例:

list-commands.sh
LPUSH queue:email task1 task2
RPOP queue:email
LRANGE queue:email 0 -1
LLEN queue:email
BRPOP queue:email 5

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]增量迭代集合成员

常见示例:

set-commands.sh
SADD user:1:tags redis mysql backend
SISMEMBER user:1:tags redis
SMEMBERS user:1:tags
SINTER user:1:tags user:2:tags

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]增量迭代成员和分数

常见示例:

sorted-set-commands.sh
ZADD rank:article 100 article:1 200 article:2
ZREVRANGE rank:article 0 9 WITHSCORES
ZINCRBY rank:article 1 article:1
ZRANK rank:article article:1

连接命令用于测试连接、鉴权和切换数据库。

命令作用
PING检查服务是否可用
ECHO message打印字符串
AUTH password验证密码
SELECT index切换数据库
QUIT关闭当前连接

常见示例:

connection-commands.sh
PING
AUTH your-password
SELECT 1
ECHO hello
QUIT

服务器命令多用于运维、调试、持久化和配置管理。生产环境执行前要确认影响范围。

命令作用
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 崩溃,极危险命令

常见示例:

server-commands.sh
INFO memory
DBSIZE
SLOWLOG GET 10
BGSAVE
CLIENT LIST
ROLE

Redis 支持使用 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 脚本

常见示例:

lua-commands.sh
EVAL "return redis.call('GET', KEYS[1])" 1 user:1
SCRIPT LOAD "return redis.call('GET', KEYS[1])"
EVALSHA <sha1> 1 user:1

Redis 事务可以把多个命令放到一个队列中,最后一起执行。它不等同于关系型数据库事务,不支持复杂回滚。

命令作用
MULTI标记事务开始
EXEC执行事务队列中的所有命令
DISCARD取消事务,放弃队列中的命令
WATCH key [key ...]监视 key,如果被修改则事务执行失败
UNWATCH取消所有 key 的监视

常见示例:

transaction-commands.sh
WATCH stock:1
MULTI
DECR stock:1
INCR sold:1
EXEC

HyperLogLog 用于基数统计,适合统计 UV、去重数量等场景。它占用空间小,但结果是估算值。

命令作用
PFADD key element [element ...]添加元素到 HyperLogLog
PFCOUNT key [key ...]返回基数估算值
PFMERGE destkey sourcekey [sourcekey ...]合并多个 HyperLogLog

常见示例:

hyperloglog-commands.sh
PFADD uv:2026-05-20 user:1 user:2 user:3
PFCOUNT uv:2026-05-20
PFMERGE uv:total uv:2026-05-19 uv:2026-05-20

发布订阅适合简单消息通知。它不保证消息持久化,订阅者离线期间会错过消息。

命令作用
PUBLISH channel message向指定频道发布消息
SUBSCRIBE channel [channel ...]订阅一个或多个频道
UNSUBSCRIBE [channel ...]退订频道
PSUBSCRIBE pattern [pattern ...]按模式订阅频道
PUNSUBSCRIBE [pattern ...]退订模式频道
PUBSUB subcommand [argument ...]查看发布订阅状态

常见示例:

pubsub-commands.sh
SUBSCRIBE news
PUBLISH news "hello redis"
PSUBSCRIBE news:*
PUBSUB CHANNELS

如果业务需要可靠消息、确认机制、重试和持久化,通常应该考虑消息队列或 Redis Stream,而不是普通发布订阅。

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

常见示例:

geo-commands.sh
GEOADD city 120.1551 30.2741 hangzhou
GEOADD city 121.4737 31.2304 shanghai
GEODIST city hangzhou shanghai km
GEOPOS city hangzhou
GEOSEARCH city FROMMEMBER hangzhou BYRADIUS 200 km WITHDIST

Redis 6.2 之后,GEORADIUSGEORADIUSBYMEMBER 已被标记为废弃命令。新代码优先使用 GEOSEARCHGEOSEARCHSTORE

场景常用命令
普通缓存SETGETEXPIRETTL
分布式锁基础写法SET key value NX EX seconds
用户对象缓存HSETHGETHMGETHGETALL
队列LPUSHRPOPBRPOP
标签去重SADDSISMEMBERSMEMBERS
排行榜ZADDZREVRANGEZINCRBY
延时任务ZADDZRANGEBYSCOREZREM
UV 估算PFADDPFCOUNT
附近的人GEOADDGEOSEARCHGEODIST
原子组合操作EVALEVALSHA