Redis 通用命令
1. 核心命令速查
Section titled “1. 核心命令速查”| 命令 | 作用 | 时间复杂度 | 生产可用 |
|---|---|---|---|
KEYS | 模式匹配查找所有 key | O(N) | ❌ 慎用 |
SCAN | 渐进式迭代 key | O(1)/次 | ✅ 推荐 |
DEL | 删除一个或多个 key | O(N) | ✅ |
UNLINK | 异步删除 key(非阻塞) | O(1) | ✅ 大 key 推荐 |
EXISTS | 检查 key 是否存在 | O(1) | ✅ |
EXPIRE | 设置过期时间(秒) | O(1) | ✅ |
TTL | 查看剩余过期时间(秒) | O(1) | ✅ |
PERSIST | 移除过期时间 | O(1) | ✅ |
TYPE | 查看 key 的数据类型 | O(1) | ✅ |
2. KEYS — 模式匹配查找
Section titled “2. KEYS — 模式匹配查找”按通配符模式查找所有匹配的 key。
语法
KEYS pattern通配符规则
| 通配符 | 含义 | 示例 |
|---|---|---|
* | 任意长度任意字符 | user:* 匹配所有用户 key |
? | 任意单个字符 | user:100? 匹配 user:1001、user:1002 |
[ae] | 字符集合中的一个 | h[ae]llo 匹配 hello、hallo |
SET user:1001 "Alice"SET user:1002 "Bob"
KEYS user:* # → ["user:1001", "user:1002"]KEYS user:100? # → ["user:1001", "user:1002"]SCAN 替代方案
# 渐进式扫描,每次返回少量结果,不阻塞主线程SCAN 0 MATCH user:* COUNT 100# 返回值:[下一个游标, [本批匹配的 key...]]# 游标返回 0 时表示完整扫描结束3. DEL — 删除 key
Section titled “3. DEL — 删除 key”删除一个或多个 key,返回实际删除的 key 数量。
语法
DEL key [key ...]SET name "Redis"SET version "7.0"
DEL name # → 1DEL name version # → 1(name 已不存在,version 删除成功)DEL non_existing # → 0(key 不存在时不报错)4. EXISTS — 检查 key 是否存在
Section titled “4. EXISTS — 检查 key 是否存在”语法
EXISTS key [key ...]SET foo "bar"
EXISTS foo # → 1(存在)EXISTS non_existing # → 0(不存在)EXISTS foo foo # → 2(同一个 key 传两次,计数两次)返回值为整数 N,表示传入的所有 key 中实际存在的数量(重复传入同一 key 会被重复计数)。
5. EXPIRE / TTL — 过期时间管理
Section titled “5. EXPIRE / TTL — 过期时间管理”5.1. 设置过期时间
Section titled “5.1. 设置过期时间”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 # 取消过期时间,变为永久 keyTTL session # → -15.2. 查询剩余时间
Section titled “5.2. 查询剩余时间”TTL key # 返回剩余秒数PTTL key # 返回剩余毫秒数TTL 返回值速查
| 返回值 | 含义 |
|---|---|
≥ 0 | key 存在,剩余过期秒数 |
-1 | key 存在,但没有设置过期时间(永久) |
-2 | key 不存在 |
key 生命周期示意
SET session "active" → TTL = -1(永久) ↓ EXPIRE session 30 → TTL = 30 ↓ 时间流逝 → TTL = 8 ↓ 继续流逝 → TTL = 0 → key 自动删除 → TTL = -26. TYPE — 查看数据类型
Section titled “6. TYPE — 查看数据类型”TYPE keySET str_key "hello"LPUSH list_key a b cHSET hash_key field valueSADD set_key a b cZADD zset_key 1.0 member
TYPE str_key # → stringTYPE list_key # → listTYPE hash_key # → hashTYPE set_key # → setTYPE zset_key # → zsetTYPE no_key # → none(key 不存在)7. 过期策略底层原理
Section titled “7. 过期策略底层原理”Redis 并非到期立刻删除 key,而是采用惰性删除 + 定期删除两种策略结合:
惰性删除:访问 key 时检查是否过期,过期则删除并返回 nil定期删除:后台定时任务随机抽样,批量删除已过期的 key| 策略 | 触发时机 | 优点 | 缺点 |
|---|---|---|---|
| 惰性删除 | 访问 key 时 | CPU 消耗低 | 不访问则持续占用内存 |
| 定期删除 | 后台定时执行 | 能清理不再访问的 key | 无法精确保证到期即删 |