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 排查问题即可。

笔记加载中…