跳转到内容

Redis 通用命令


命令作用时间复杂度生产可用
KEYS模式匹配查找所有 keyO(N)❌ 慎用
SCAN渐进式迭代 keyO(1)/次✅ 推荐
DEL删除一个或多个 keyO(N)
UNLINK异步删除 key(非阻塞)O(1)✅ 大 key 推荐
EXISTS检查 key 是否存在O(1)
EXPIRE设置过期时间(秒)O(1)
TTL查看剩余过期时间(秒)O(1)
PERSIST移除过期时间O(1)
TYPE查看 key 的数据类型O(1)

按通配符模式查找所有匹配的 key。

语法

KEYS pattern

通配符规则

通配符含义示例
*任意长度任意字符user:* 匹配所有用户 key
?任意单个字符user:100? 匹配 user:1001user:1002
[ae]字符集合中的一个h[ae]llo 匹配 hellohallo
Terminal window
SET user:1001 "Alice"
SET user:1002 "Bob"
KEYS user:* # → ["user:1001", "user:1002"]
KEYS user:100? # → ["user:1001", "user:1002"]

SCAN 替代方案

Terminal window
# 渐进式扫描,每次返回少量结果,不阻塞主线程
SCAN 0 MATCH user:* COUNT 100
# 返回值:[下一个游标, [本批匹配的 key...]]
# 游标返回 0 时表示完整扫描结束

删除一个或多个 key,返回实际删除的 key 数量。

语法

DEL key [key ...]
SET name "Redis"
SET version "7.0"
DEL name # → 1
DEL name version # → 1(name 已不存在,version 删除成功)
DEL non_existing # → 0(key 不存在时不报错)

语法

EXISTS key [key ...]
SET foo "bar"
EXISTS foo # → 1(存在)
EXISTS non_existing # → 0(不存在)
EXISTS foo foo # → 2(同一个 key 传两次,计数两次)

返回值为整数 N,表示传入的所有 key 中实际存在的数量(重复传入同一 key 会被重复计数)。

EXPIRE key seconds # 相对过期(N 秒后)
PEXPIRE key milliseconds # 相对过期(N 毫秒后)
EXPIREAT key unix-timestamp # 绝对过期(Unix 时间戳,秒)
PEXPIREAT key unix-ms-timestamp # 绝对过期(Unix 时间戳,毫秒)
SET session "active"
EXPIRE session 30 # 30 秒后自动删除
PERSIST session # 取消过期时间,变为永久 key
TTL session # → -1
TTL key # 返回剩余秒数
PTTL key # 返回剩余毫秒数

TTL 返回值速查

返回值含义
≥ 0key 存在,剩余过期秒数
-1key 存在,但没有设置过期时间(永久)
-2key 不存在

key 生命周期示意

SET session "active" → TTL = -1(永久)
↓ EXPIRE session 30
→ TTL = 30
↓ 时间流逝
→ TTL = 8
↓ 继续流逝
→ TTL = 0 → key 自动删除 → TTL = -2
TYPE key
SET str_key "hello"
LPUSH list_key a b c
HSET hash_key field value
SADD set_key a b c
ZADD zset_key 1.0 member
TYPE str_key # → string
TYPE list_key # → list
TYPE hash_key # → hash
TYPE set_key # → set
TYPE zset_key # → zset
TYPE no_key # → none(key 不存在)

Redis 并非到期立刻删除 key,而是采用惰性删除 + 定期删除两种策略结合:

惰性删除:访问 key 时检查是否过期,过期则删除并返回 nil
定期删除:后台定时任务随机抽样,批量删除已过期的 key
策略触发时机优点缺点
惰性删除访问 key 时CPU 消耗低不访问则持续占用内存
定期删除后台定时执行能清理不再访问的 key无法精确保证到期即删