Skip to content

第05章:通用命令全集 ​

本章目标 ​

熟练使用 Redis 通用命令(适用于所有数据类型)


5.1 Key 遍历:SCAN(不要用 KEYS) ​

bash
# KEYS:阻塞式遍历(⚠️ 生产禁用)
KEYS *              # 所有Key
KEYS user:*         # 匹配user:开头的
KEYS ???            # 3个字符的Key(?匹配单字符)
KEYS [abc]*         # a/b/c开头的

# SCAN:非阻塞式遍历(✅ 生产用)
SCAN 0                     # 从cursor=0开始
SCAN 0 MATCH user:* COUNT 100  # 匹配+每批100个
SCAN 48 MATCH user:* COUNT 100  # 继续上次cursor

# 工作方式:
# SCAN每次返回一小批Key + 新的cursor
# cursor为0时说明遍历完成
# 遍历过程中新增/删除的Key可能被返回也可能不返回

5.2 Key 操作 ​

bash
# DEL:删除(同步,大Key会卡)
DEL key1 key2 key3       # 返回删除数量

# UNLINK:异步删除(Redis 4.0+,推荐)
UNLINK key1 key2

# EXISTS:判断存在
EXISTS key              # 1=存在, 0=不存在

# TYPE:查看类型
TYPE key                # string/hash/list/set/zset/none

# RENAME:重命名
RENAME old new          # 如果new已存在会被覆盖!
RENAMENX old new         # 只有new不存在时才重命名

# RANDOMKEY:随机返回一个Key
RANDOMKEY

# MOVE:移动到其他数据库
MOVE key 2              # 移到2号数据库

# DBSIZE:当前数据库Key数
DBSIZE

# ⚠️ FLUSHDB:清空当前数据库
# ⚠️ FLUSHALL:清空所有数据库
# 生产环境应 rename-command FLUSHALL ""

5.3 匹配模式 ​

bash
KEYS h?llo         # hello/hallo/hxllo(?匹配一个字符)
KEYS h*llo         # hello/haaaallo(*匹配任意字符)
KEYS h[ae]llo      # hello/hallo([ae]匹配a或e)
KEYS h[^e]llo      # hallo([^e]不匹配e)

常见错误 ​

错误1:生产用 KEYS ​

bash
# ❌ 一千万个 Key,KEYS * 遍历期间 Redis 卡死
KEYS *
# ✅ 用 SCAN
SCAN 0 MATCH * COUNT 1000

错误2:RENAME 覆盖已有 Key ​

bash
SET a "value1"
SET b "value2"
RENAME a b    # b 原来的值被覆盖了!
# 用 RENAMENX 安全

错误3:FLUSHDB 当 TRUNCATE 用 ​

MySQL 的 TRUNCATE 清空一张表,Redis 的 FLUSHDB 清空整个数据库(所有表)。两者不可混淆!


本章小结 ​

  • SCAN 代替 KEYS(非阻塞 vs 阻塞)
  • UNLINK 代替 DEL(异步 vs 同步)
  • RENAMENX 代替 RENAME(安全)
  • FLUSHDB/FLUSHALL 永远是危险操作

练习题 ​

  1. 创建 100 个 Key(user:1 到 user:100),用 SCAN 遍历。
  2. 对比 DEL 和 UNLINK 删除大量数据时的行为。
  3. 验证 RENAME 和 RENAMENX 的区别。

把零散知识,整理成可以反复走的路。