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 脚本)等问题。