第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 永远是危险操作
练习题
- 创建 100 个 Key(user:1 到 user:100),用 SCAN 遍历。
- 对比 DEL 和 UNLINK 删除大量数据时的行为。
- 验证 RENAME 和 RENAMENX 的区别。