Redis 键 Key 通用命令
无论 value 是哪种类型,key 的操作命令都是同一套。删除、判存、查类型、设过期、改名在生产中天天用到;而 KEYS 全表扫描是生产红线,务必用 SCAN 替代。
删除与判存
DEL 删除一个或多个键并返回删除个数,EXISTS 判存在。DEL 同步删除超大键会阻塞主线程,可改用 UNLINK 异步删:
SET a 1
SET b 2
DEL a b
# 输出:(integer) 2
EXISTS a
# 输出:(integer) 0
类型查询
TYPE 返回 value 类型,可判断命令是否用对:
SET s hello
HSET h f v
RPUSH l x
TYPE s
# 输出:string
TYPE h
# 输出:hash
TYPE l
# 输出:list
过期设置(简引)
EXPIRE 设秒级过期,TTL 查剩余秒数,PERSIST 取消过期;完整删除策略见过期章节:
SET token abc
EXPIRE token 60
# 输出:(integer) 1
TTL token
# 输出:(integer) 60
PERSIST token
# 输出:(integer) 1
TTL token
# 输出:(integer) -1 # -1 表示永不过期
改名
RENAME 改名但会覆盖同名目标键,RENAMENX 仅目标不存在时成功:
SET oldkey v1
RENAME oldkey newkey
# 输出:OK
GET newkey
# 输出:"v1"
KEYS 与 SCAN
KEYS 按通配符全库匹配,数据量大时阻塞服务,生产禁用:
KEYS user:*
# 输出:1) "user:1" 2) "user:2" # 仅小数据量测试可用
SCAN 是游标式分批遍历,每次返回「下一批游标 + 一批元素」,非 0 游标要接着调用,回到 0 才遍历完:
SCAN 0 MATCH user:* COUNT 100
# 输出:1) "184" # 非 0:用该游标继续 SCAN
# 2) 1) "user:1" 2) "user:2"
SCAN 不阻塞主线程;遍历期间键增删可能造成漏扫或重复,业务要能容忍。
OBJECT 与 DUMP
OBJECT ENCODING 查看键的底层编码(int/embstr/listpack/skiplist 等),排查内存问题时有用:
SET n 12345
OBJECT ENCODING n
# 输出:int
DUMP 序列化单个键、RESTORE 按内容还原,可用于单键迁移:
DUMP user:1
# 输出:"\x00..." # 二进制序列化内容
RESTORE user:1-copy 0 "\x00..." # 0 表示不过期
易踩坑
- 通配删除没有现成命令:用 SCAN 收集再批量 DEL,别 KEYS 一把梭;
- 键名要统一命名规范(业务:对象:ID),否则 SCAN 匹配都难写;
- 大键 DEL 阻塞明显,优先 UNLINK。
小结
键命令是 Redis 的通用底座:DEL/EXISTS/TYPE 管增删查,EXPIRE/TTL 控生命周期,RENAME 整理命名。牢记「生产禁 KEYS、用 SCAN」,配合 OBJECT/DUMP 排查问题即可。