KEY 是 Redis 中与键(key)管理相关的命令分类,包括键的查找、删除、过期、重命名、迁移等操作。
KEY 类命令包含以下常用命令:
KEYS pattern
DEL key [key ...]
UNLINK key [key ...]
EXISTS key [key ...]
EXPIRE key seconds [NX | XX | GT | LT]
PEXPIRE key milliseconds [NX | XX | GT | LT]
EXPIRETIME key
PEXPIRETIME key
TTL key
PTTL key
PERSIST key
RENAME key newkey
RENAMENX key newkey
TYPE key
RANDOMKEY
SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]
SORT key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC | DESC] [ALPHA] [STORE destination]
MOVE key db
MIGRATE host port key destination-db timeout [COPY] [REPLACE] [AUTH password] [AUTH2 username password] [KEYS key [key ...]]
DUMP key
RESTORE key ttl serialized-value [REPLACE] [ABSTTL] [IDLETIME seconds] [FREQ frequency]
RESTORE-ASKING key ttl serialized-value [REPLACE] [ABSTTL] [IDLETIME seconds] [FREQ frequency]
OBJECT ENCODING key
OBJECT FREQ key
OBJECT IDLETIME key
OBJECT REFCOUNT key
TOUCH key [key ...]
WAIT numreplicas timeout
WAITAOF numlocal numreplicas timeout
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | 键名 |
| pattern | String | 是 | 模式匹配字符串,支持 * ? [] |
| seconds | Integer | 是 | 过期时间(秒) |
| milliseconds | Integer | 是 | 过期时间(毫秒) |
| cursor | Integer | 是 | SCAN 游标 |
| newkey | String | 是 | 新键名 |
| db | Integer | 是 | 数据库索引 |
| host | String | 是 | 目标主机 |
| port | Integer | 是 | 目标端口 |
| timeout | Integer | 是 | 超时时间(毫秒) |
| serialized-value | String | 是 | DUMP 序列化的值 |
> KEYS user:*
1) "user:1001"
2) "user:1002"
> SCAN 0 MATCH user:* COUNT 10
1) "17"
2) 1) "user:1001"
2) "user:1002"
> EXPIRE session:123 3600
(integer) 1
> TTL session:123
(integer) 3599
> PERSIST session:123
(integer) 1
> DUMP mykey
"\x00\x05hello\x06\x00\x8f-\x83\xeb\x0c\xba\x89\xee"
> RESTORE newkey 0 "\x00\x05hello\x06\x00\x8f-\x83\xeb\x0c\xba\x89\xee"
OK
> OBJECT ENCODING mykey
"embstr"
> OBJECT IDLETIME mykey
(integer) 120
> OBJECT REFCOUNT mykey
(integer) 1
> WAIT 1 5000
(integer) 1
> WAITAOF 1 1 5000
(integer) 1
| 错误 | 原因 | 解决 |
|---|---|---|
| ERR wrong number of arguments | 参数数量不足 | 检查参数 |
| ERR no such key | 键不存在 | 确认键名正确 |
| ERR source and destination objects are the same | RENAME 新旧名相同 | 使用不同名称 |
| ERR keys in request don't hash to the same slot | 集群中键不在同一槽 | 确保键哈希到同一槽 |
Q1: KEYS 和 SCAN 有什么区别? A: KEYS 阻塞服务器,生产环境禁用;SCAN 非阻塞,安全遍历。
Q2: DEL 和 UNLINK 有什么区别? A: DEL 同步删除,阻塞;UNLINK 异步后台删除,立即返回。
Q3: 如何取消键的过期时间? A: 使用 PERSIST key。
Q4: RENAME 会覆盖已存在的目标键吗? A: 会,使用 RENAMENX 可避免覆盖。
Q5: WAIT 和 WAITAOF 有什么区别? A: WAIT 等待副本确认复制;WAITAOF 等待本地和副本的 AOF 持久化确认。