Redis 8.4 常用核心命令
以下梳理 Redis 除数据类型操作外的高频通用命令,按「命令分类+常用操作(含时间复杂度)+功能说明+使用场景+注意事项」维度整理,覆盖运维、性能、数据管理核心场景。
一、键(Key)通用操作
常用操作(时间复杂度)
| 操作命令 | 功能说明 | 时间复杂度 |
|---|---|---|
| DEL key1 key2… | 删除指定键(支持批量) | O(N)(N为删除键数) |
| EXISTS key | 判断键是否存在 | O(1) |
| EXPIRE key seconds | 设置键过期时间(秒级) | O(1) |
| PEXPIRE key ms | 设置键过期时间(毫秒级) | O(1) |
| TTL key | 获取键剩余过期时间(秒,-1=永不过期,-2=不存在) | O(1) |
| PTTL key | 获取键剩余过期时间(毫秒) | O(1) |
| PERSIST key | 移除键的过期时间(变为永不过期) | O(1) |
| RENAME key newkey | 重命名键(newkey存在则覆盖) | O(1) |
| RENAMENX key newkey | 仅newkey不存在时重命名 | O(1) |
| TYPE key | 获取键对应值的数据类型(string/hash/list等) | O(1) |
| KEYS pattern | 按通配符匹配键(如 KEYS user:*) | O(N)(N为数据库总键数) |
| SCAN cursor [MATCH pattern] [COUNT n] | 迭代遍历键(非阻塞,替代KEYS) | O(1)(单次)/O(N)(全量) |
| MOVE key db | 将键移动到指定数据库(如 MOVE user:1001 1) | O(1) |
| RANDOMKEY | 随机返回一个存在的键 | O(1) |
使用场景
- 键生命周期管理:EXPIRE/PEXPIRE 设置缓存过期(如商品缓存30分钟),TTL 监控过期时间;
- 批量清理数据:DEL 批量删除无用键,SCAN 遍历删除符合规则的键(如过期的日志键);
- 数据迁移:MOVE 拆分不同业务数据到不同数据库;
- 类型校验:TYPE 排查数据类型错误(如误将 Hash 存为 String)。
注意事项
- KEYS 命令在键数量大时(如百万级)会阻塞主线程,生产环境优先用 SCAN;
- SCAN 的 cursor 为 0 表示遍历结束,COUNT 仅为提示值,实际返回数量可能不符;
- RENAME 会覆盖已有 newkey,需先 EXISTS 校验,或用 RENAMENX;
- EXPIRE 对 Hash/ZSet 等类型仅作用于整个 key,无法单独设置字段/元素过期。
二、数据库(DB)操作
常用操作(时间复杂度)
| 操作命令 | 功能说明 | 时间复杂度 |
|---|---|---|
| SELECT db | 切换数据库(默认0-15共16个库) | O(1) |
| FLUSHDB | 清空当前数据库所有键 | O(N)(N为当前库键数) |
| FLUSHALL | 清空所有数据库所有键 | O(N)(N为总键数) |
| DBSIZE | 获取当前数据库键的数量 | O(1) |
| SWAPDB db1 db2 | 交换两个数据库的所有数据 | O(1) |
使用场景
- 业务数据隔离:SELECT 将不同业务(如用户、订单)拆分到不同数据库;
- 测试环境清理:FLUSHDB 清空测试库数据,避免影响生产;
- 数据量监控:DBSIZE 统计当前库键数,监控数据增长;
- 数据替换:SWAPDB 无缝切换新版本数据(如缓存预热后替换旧数据)。
注意事项
- 生产环境禁止使用 FLUSHALL,误操作会导致全量数据丢失;
- Redis Cluster 模式下不支持多数据库(仅默认0库),SELECT/FLUSHDB 失效;
- FLUSHDB/FLUSHALL 可加 ASYNC 异步执行(如 FLUSHDB ASYNC),减少阻塞。
三、事务(Transaction)操作
常用操作(时间复杂度)
| 操作命令 | 功能说明 | 时间复杂度 |
|---|---|---|
| MULTI | 开启事务(命令入队,EXEC 执行) | O(1) |
| EXEC | 执行事务中所有入队命令 | 各命令自身复杂度 |
| DISCARD | 放弃事务,清空入队命令 | O(1) |
| WATCH key1 key2… | 监控键,若事务执行前键被修改,事务取消 | O(1) |
| UNWATCH | 取消所有键的监控 | O(1) |
使用场景
- 原子性批量操作:如扣减库存+增加订单数(MULTI 包裹两个命令,EXEC 执行);
- 乐观锁控制:WATCH 监控库存键,防止并发扣减超量。
注意事项
- Redis 事务仅保证「命令入队的原子性」,执行中某命令失败,其他命令仍会执行(无回滚);
- WATCH 监控的键若被修改,EXEC 返回 nil,需业务层重试;
- 事务中无法嵌套 MULTI,EXEC/DISCARD/UNWATCH 会终止事务;
- 高并发下 WATCH 易导致事务失败,可改用 Lua 脚本或分布式锁。
四、Lua 脚本操作
常用操作(时间复杂度)
| 操作命令 | 功能说明 | 时间复杂度 |
|---|---|---|
| EVAL script numkeys key1 key2… arg1 arg2… | 执行Lua脚本 | 脚本内命令复杂度 |
| EVALSHA sha1 numkeys key1… arg1… | 执行已缓存的Lua脚本(避免重复传输) | 脚本内命令复杂度 |
| SCRIPT LOAD script | 将Lua脚本加载到缓存,返回SHA1值 | O(1) |
| SCRIPT EXISTS sha1… | 判断脚本是否在缓存中 | O(N)(N为SHA1数) |
| SCRIPT FLUSH | 清空所有缓存的Lua脚本 | O(1) |
使用场景
- 原子性复杂操作:如分布式锁解锁(校验UUID+删除键,Lua保证原子性);
- 批量逻辑执行:如批量修改Hash字段+更新计数器,减少网络请求;
- 自定义逻辑:如按规则过滤ZSet元素,Redis命令无法实现的复杂逻辑。
注意事项
- Lua 脚本执行时间不宜过长(建议<100ms),会阻塞主线程;
- EVALSHA 需先通过 SCRIPT LOAD 加载脚本,避免脚本不存在报错;
- 脚本中禁止使用 KEYS 通配符,需通过参数传入键名,兼容 Redis Cluster;
- Redis 内置随机命令(如 RANDOMKEY)在脚本中执行结果固定,需用 redis.call(‘RANDOMKEY’) 实时获取。
五、持久化(Persistence)操作
常用操作(时间复杂度)
| 操作命令 | 功能说明 | 时间复杂度 |
|---|---|---|
| SAVE | 同步执行RDB持久化(阻塞主线程) | O(N)(N为总键数) |
| BGSAVE | 异步执行RDB持久化(fork子进程) | O(1)(主进程)/O(N)(子进程) |
| LASTSAVE | 获取最后一次RDB持久化的时间戳 | O(1) |
| BGREWRITEAOF | 异步重写AOF文件(压缩AOF日志) | O(1)(主进程)/O(N)(子进程) |
| CONFIG SET appendonly yes | 开启AOF持久化(需重启生效或CONFIG REWRITE) | O(1) |
| CONFIG GET save | 获取RDB持久化配置(如 save 900 1) | O(1) |
使用场景
- 手动备份:BGSAVE 触发RDB备份,用于数据归档;
- 持久化监控:LASTSAVE 检查RDB是否正常执行;
- AOF优化:BGREWRITEAOF 压缩AOF文件,减少磁盘占用。
注意事项
- 生产环境禁止使用 SAVE,会阻塞主线程导致服务不可用;
- BGSAVE/BGREWRITEAOF 依赖 fork 子进程,内存不足时 fork 失败;
- AOF 重写期间,Redis 会缓存新命令,重写完成后追加到新AOF文件;
- 持久化配置建议通过配置文件修改,而非 CONFIG SET(重启失效)。
六、集群/连接操作
常用操作(时间复杂度)
| 操作命令 | 功能说明 | 时间复杂度 |
|---|---|---|
| PING [message] | 测试连接是否存活(返回PONG或自定义消息) | O(1) |
| AUTH password | 验证密码(开启requirepass时) | O(1) |
| CONFIG GET parameter | 获取配置参数(如 CONFIG GET maxmemory) | O(1) |
| CONFIG SET parameter value | 设置配置参数(如 CONFIG SET maxmemory 10GB) | O(1) |
| INFO [section] | 获取Redis状态信息(如 INFO memory/cpu) | O(1) |
| CLIENT LIST | 列出所有客户端连接 | O(N)(N为连接数) |
| CLIENT KILL ip:port | 关闭指定客户端连接 | O(1) |
| CLIENT SETNAME name | 设置当前连接名称(便于排查) | O(1) |
| CLUSTER INFO | 获取集群状态信息(仅Cluster模式) | O(1) |
| CLUSTER NODES | 获取集群节点列表(仅Cluster模式) | O(1) |
使用场景
- 健康检查:PING 监控Redis服务是否可用;
- 权限控制:AUTH 验证客户端身份,防止未授权访问;
- 性能监控:INFO 查看内存使用、CPU占用、命中率(keyspace_hits/keyspace_misses);
- 连接管理:CLIENT LIST 排查慢连接/异常连接,CLIENT KILL 关闭占用资源的连接;
- 集群运维:CLUSTER INFO/NODES 监控集群节点状态。
注意事项
- CONFIG SET 修改的配置重启后失效,需同步到配置文件;
- INFO 可指定section(如 memory、cpu、stats),减少返回数据量;
- CLIENT KILL 需谨慎,避免关闭正常业务连接;
- Cluster 模式下 CONFIG SET/GET 仅作用于当前节点,需逐个节点配置。
七、发布订阅(Pub/Sub)操作
常用操作(时间复杂度)
| 操作命令 | 功能说明 | 时间复杂度 |
|---|---|---|
| PUBLISH channel message | 向指定频道发布消息 | O(N)(N为订阅者数) |
| SUBSCRIBE channel1… | 订阅一个或多个频道 | O(1) |
| PSUBSCRIBE pattern… | 按通配符订阅频道(如 PSUBSCRIBE news:*) | O(1) |
| UNSUBSCRIBE [channel…] | 取消频道订阅 | O(1) |
| PUNSUBSCRIBE [pattern…] | 取消通配符频道订阅 | O(1) |
| PUBSUB CHANNELS [pattern] | 列出所有活跃频道(有消息发布的频道) | O(N)(N为频道数) |
| PUBSUB NUMSUB channel1… | 统计频道订阅者数量 | O(N)(N为频道数) |
使用场景
- 实时消息通知:如订单创建后发布通知,库存服务订阅更新;
- 分布式缓存失效:发布缓存更新消息,所有节点订阅后清理本地缓存;
- 日志实时推送:业务日志发布到频道,日志服务订阅收集。
注意事项
- 发布订阅不持久化消息,订阅者离线会丢失消息,需用 Stream 替代;
- PSUBSCRIBE 订阅的通配符频道,需用 PUNSUBSCRIBE 取消,UNSUBSCRIBE 无效;
- 订阅后客户端进入阻塞状态,仅能执行订阅/取消订阅/QUIT 命令;
- 高并发发布消息时,PUBLISH 会阻塞主线程,建议控制订阅者数量。
八、内存管理操作
常用操作(时间复杂度)
| 操作命令 | 功能说明 | 时间复杂度 |
|---|---|---|
| MEMORY USAGE key [SAMPLES count] | 计算键占用的内存(字节) | O(N)(N为键值大小) |
| MEMORY STATS | 获取内存使用详细统计(如碎片率、峰值) | O(1) |
| MEMORY PURGE | 尝试释放操作系统内存(仅Linux有效) | O(1) |
| CONFIG SET maxmemory policy | 设置内存淘汰策略(如 maxmemory-policy allkeys-lru) | O(1) |
使用场景
- 内存排查:MEMORY USAGE 定位大Key(如占用超100MB的String);
- 内存优化:MEMORY STATS 查看内存碎片率(碎片率>1.5需优化);
- 内存限制:设置 maxmemory 和淘汰策略,防止Redis占用内存过高。
注意事项
- MEMORY USAGE 的 SAMPLES 参数用于Hash/ZSet等类型,默认5,值越大结果越精确;
- 内存淘汰策略建议:热点数据用 volatile-lru,无过期数据用 allkeys-lru;
- MEMORY PURGE 仅释放Redis已申请但未使用的内存,无法释放已使用的内存。
核心总结
| 命令分类 | 核心场景 | 避坑要点 |
|---|---|---|
| 键操作 | 生命周期管理、遍历删除 | 禁用 KEYS,用 SCAN;EXPIRE 仅作用于 key 级 |
| 数据库操作 | 数据隔离、清理 | 生产禁用 FLUSHALL;Cluster 不支持多库 |
| 事务/Lua | 原子性操作 | 事务无回滚;Lua 脚本执行时间<100ms |
| 持久化操作 | 数据备份、日志优化 | 禁用 SAVE,用 BGSAVE/BGREWRITEAOF |
| 集群/连接 | 运维监控、权限控制 | CONFIG SET 配置重启失效;CLIENT KILL 谨慎 |
| 发布订阅 | 实时消息通知 | 不持久化消息,离线丢失用 Stream 替代 |
| 内存管理 | 大Key排查、内存优化 | 合理设置淘汰策略,监控内存碎片率 |
这些命令是 Redis 运维、开发的核心基础,生产环境需结合业务场景合理使用,重点规避阻塞主线程(如 KEYS、SAVE)、数据丢失(如 FLUSHALL)、性能瓶颈(如长时 Lua 脚本)等问题。