Redis 命令详解:通用命令

摘要

通用命令 简介

  • 不依赖于具体数据类型,对所有 Key 或 Redis 对象都通用的一组基础管理命令。
  • 这些命令作用在 Key 层面、对象元数据层面、存储管理层面、复制与持久化层面,而不是具体的数据结构内容。
特征 说明
与数据类型无关 不关心 value 是 String、Hash、List、JSON、Bitmap 等
作用对象是 Key 或对象元数据 如 TTL、类型、编码、引用计数、是否存在
管理属性为主 生命周期、复制、迁移、删除、遍历
可用于所有 Redis 模块数据 RedisJSON、RediSearch、TimeSeries 等同样适用
运维和系统级使用频繁 监控、迁移、数据治理、容量管理

通用命令 命令详解

一、Key 生命周期 / 过期时间管理

  • 用于设置、查询、取消 Key 的过期时间。

命令 语法 参数说明 示例
EXPIRE EXPIRE key seconds [NX|XX|GT|LT] seconds:过期秒数
NX:仅当 key 没有过期时间时设置
XX:仅当 key 已有过期时间时设置
GT:仅当新过期时间大于旧值
LT:仅当新过期时间小于旧值
EXPIRE user:1 60
PEXPIRE PEXPIRE key milliseconds [NX|XX|GT|LT] milliseconds:过期毫秒数 PEXPIRE user:1 1500
EXPIREAT EXPIREAT key unix_timestamp [NX|XX|GT|LT] unix_timestamp:秒级时间戳 EXPIREAT user:1 1737000000
PEXPIREAT PEXPIREAT key unix_milliseconds_timestamp [NX|XX|GT|LT] 毫秒级 Unix 时间戳 PEXPIREAT user:1 1737000000123
TTL TTL key 返回剩余过期时间(秒)
-1:永久 key
-2:不存在
TTL user:1
PTTL PTTL key 返回剩余过期时间(毫秒) PTTL user:1
EXPIRETIME EXPIRETIME key 返回过期时间(秒级时间戳) EXPIRETIME user:1
PEXPIRETIME PEXPIRETIME key 返回过期时间(毫秒级时间戳) PEXPIRETIME user:1
PERSIST PERSIST key 移除过期时间,使 key 永久存在 PERSIST user:1
TOUCH TOUCH key [key ...] 更新 key 最近访问时间,返回成功更新数量 TOUCH k1 k2

二、Key 查询与遍历

  • 用于查询 key 是否存在、类型、批量扫描。

命令 语法 参数说明 示例
EXISTS EXISTS key [key ...] 返回存在的 key 数量 EXISTS a b c
TYPE TYPE key 返回 key 的数据类型 TYPE user:1
KEYS KEYS pattern 按模式匹配所有 key(生产慎用) KEYS user:*
SCAN SCAN cursor [MATCH pattern] [COUNT count] cursor:游标
MATCH:匹配模式
COUNT:期望返回数量
SCAN 0 MATCH user:* COUNT 100
RANDOMKEY RANDOMKEY 随机返回一个 key RANDOMKEY

三、Key 修改 / 删除 / 复制 / 移动

  • 用于 key 的生命周期与位置管理。

命令 语法 参数说明 示例
DEL DEL key [key ...] 同步删除 key DEL k1 k2
UNLINK UNLINK key [key ...] 异步删除 key(大 key 推荐) UNLINK bigkey
COPY COPY source destination [DB db] [REPLACE] DB:目标数据库
REPLACE:覆盖目标
COPY k1 k2 REPLACE
MOVE MOVE key db db:目标数据库编号 MOVE user:1 1
RENAME RENAME key newkey 强制覆盖目标 key RENAME a b
RENAMENX RENAMENX key newkey 目标不存在时才重命名 RENAMENX a b
MIGRATE MIGRATE host port <key | ""> destination-db timeout [COPY] [REPLACE] [AUTH password | AUTH2 username password] [KEYS key [key ...]] 用于跨实例迁移 key MIGRATE 127.0.0.1 6379 k1 0 5000

MIGRATE — 命令总览

  • 将一个或多个键 原子性地 从当前 Redis 实例迁移到另一个 Redis 实例的指定数据库。迁移成功后:

1
2
目标实例上一定会有该键
默认源实例上该键将被删除(除非使用 COPY)
  • 该命令保证一致性,在迁移期间两个实例都会被阻塞一段时间。

  • 参数说明表

参数 类型 含义 是否必需
host string 目标 Redis 实例主机名或 IP
port integer 目标 Redis 实例端口
<key | “”> string 单个要迁移的键名,或空字符串用于批量模式
destination-db integer 目标实例上要写入的数据库索引(0–15)
timeout integer 最大允许的空闲 I/O 超时时间(毫秒)
COPY keyword 迁移后不删除源实例上的键
REPLACE keyword 如果目标实例已存在同名键则覆盖
AUTH password credential 用于目标实例密码认证(旧 ACL 模式)
AUTH2 username password credential 用于目标实例 ACL 用户名+密码认证
KEYS key [key …] list 如果前面的 key 是空字符串,则使用这一组键名批量迁移
  • 示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 示例 1:迁移单个 key
MIGRATE 192.168.0.100 6379 user:123 0 5000

# 示例 2:复制 key 而不删除源
MIGRATE 10.0.0.2 6379 cache:session 1 3000 COPY

# 示例 3:覆盖目标已有 key
MIGRATE 10.0.0.5 6379 app:data 2 2000 REPLACE

# 示例 4:迁移多个 key
MIGRATE 10.0.0.10 6379 "" 0 8000 KEYS orders:1 orders:2 orders:3

# 示例 5:带目标认证
MIGRATE 10.0.0.20 6379 user:token 1 5000 AUTH s3cr3t REPLACE
  • 典型使用场景

场景 应用举例
单节点间数据迁移 从 dev Redis 到 prod Redis
大库数据切分 数据重分片
集群迁移前准备 手动分配 slot 关联 key
灾备数据同步 复制业务数据库的部分 key

四、序列化 / 备份 / 恢复

  • 用于数据导出和导入。

命令 语法 参数说明 示例
DUMP DUMP key 返回序列化后的二进制值 DUMP user:1
RESTORE RESTORE key ttl serialized-value [REPLACE] ttl:毫秒
serialized-value:DUMP 输出
RESTORE user:2 0 "<dump>" REPLACE

五、排序相关

  • 对集合数据进行排序。

命令 语法 参数说明 示例
SORT SORT key [BY pattern] [LIMIT offset count] [GET pattern ...] [ASC|DESC] [ALPHA] [STORE dest] 支持排序、分页、映射、存储 SORT mylist ASC STORE sorted:list
SORT_RO SORT_RO key ... 只读排序(不会修改数据) SORT_RO mylist DESC

六、对象内部信息(调试 / 运维)

  • 用于诊断 Redis 内部对象状态。

命令 语法 参数说明 示例
OBJECT ENCODING OBJECT ENCODING key 返回内部编码方式 OBJECT ENCODING user:1
OBJECT FREQ OBJECT FREQ key 返回 LFU 访问频率 OBJECT FREQ user:1
OBJECT IDLETIME OBJECT IDLETIME key 返回空闲时间(秒) OBJECT IDLETIME user:1
OBJECT REFCOUNT OBJECT REFCOUNT key 返回引用计数 OBJECT REFCOUNT user:1

七、复制一致性 / 持久化确认

  • 主要用于 写入可靠性保证、强一致性场景。

7.1 WAIT —— 等待副本确认

项目 内容
命令 WAIT
语法 WAIT numreplicas timeout
参数说明 numreplicas:需要确认写入的副本数量
timeout:最大等待时间(毫秒)
返回值 实际确认的副本数量
作用 阻塞当前客户端,直到之前的写命令被至少 numreplicas 个副本确认
典型场景 强一致写、主从同步确认、金融类写入
  • 示例

1
2
3
4
5
6
7
SET order:1 PAID
WAIT 2 5000
# 含义:
# 等待至少 2 个副本确认该写入。
# 最多等待 5 秒。
# 如果 5 秒内只确认 1 个副本,则返回 1。
# 返回0,则表示没有副本确认该写入。

7.2 WAITAOF —— 等待 AOF 和副本持久化确认

  • Redis 7+ 新增,用于保证 本地 AOF fsync + 副本同步 的写入可靠性。

项目 内容
命令 WAITAOF
语法 WAITAOF numlocal numreplicas timeout
参数说明 numlocal:本地 AOF fsync 确认数量(0/1)
numreplicas:副本确认数量
timeout:最大等待时间(毫秒)
返回值 数组:[local_acks, replica_acks]
作用 阻塞直到写入被本地 AOF 持久化和/或副本确认
典型场景 金融交易、强持久化一致性要求
  • 参数语义说明

参数 含义
numlocal = 1 等待本地 AOF fsync 完成
numlocal = 0 不要求本地 fsync
numreplicas 等待副本确认数量
timeout 超时时间(毫秒)
  • 示例 1:要求本地 AOF 持久化

1
2
3
4
5
6
SET pay:1001 SUCCESS
WAITAOF 1 0 3000
# 含义:
# 必须确认 写入已经 fsync 到本地 AOF 文件。
# 不关心副本同步。
# 超时 3 秒。
  • 示例 2:同时要求 AOF + 副本确认

1
2
3
4
5
6
SET pay:1002 SUCCESS
WAITAOF 1 2 5000
# 含义:
# 必须确认本地 AOF 已 fsync。
# 至少 2 个副本确认。
# 最大等待 5 秒。
  • 示例返回值

1
2
1) (integer) 1   # 本地 fsync 确认数量
2) (integer) 2 # 副本确认数量