Skip to content
← 返回Redis列表
数据与原子性

Redis 键管理:数量、扫描与过期时间 ​

Redis 键与过期时间 ​

键用于定位数据。可以使用 app:对象:编号:字段 这样的命名约定,例如 shop:user:42:name;冒号只是方便人阅读,不会自动创建目录或提供权限隔离。

查询键 ​

命令用途
TYPE key查看值类型;键不存在时返回 none
EXISTS key检查键是否存在
TTL key / PTTL key查看剩余秒数 / 毫秒数
DEL key删除指定键

设置与保留过期时间 ​

SET key value EX 60 在写入时设置 60 秒有效期,EXPIRE key 60 为已有键设置有效期。TTL 返回 -1 表示没有过期时间,-2 表示键不存在;返回非负整数表示剩余秒数。

普通 SET 覆盖值会清除原来的 TTL;SET ... KEEPTTL 可保留。INCR、HSET 等修改值内容的操作不会重置整个键的 TTL。PERSIST 移除整个键的过期时间。

下面是独立实验服务中的练习步骤,输出是预期结果,本次文档整理未运行这些命令:

text
SET learn:ttl value EX 60
TTL learn:ttl
SET learn:ttl replacement
TTL learn:ttl
EXPIRE learn:ttl 60
SET learn:ttl final KEEPTTL
TTL learn:ttl
DEL learn:ttl
TTL learn:ttl

及时执行时,第一次 TTL 为 0 到 60 之间;普通覆盖后为 -1;保留 TTL 后继续倒计时;删除后为 -2。中途等待超过有效期,结果也会变化。

查找一组键 ​

从 SCAN 0 MATCH learn:* COUNT 100 开始,使用返回的游标继续扫描,直到游标回到 0。COUNT 是工作量提示,不能把一次空结果当成扫描完成;并发变化时还需处理重复结果,扫描不提供快照。

不要把线上全量查键当成普通请求路径。大键空间上的 KEYS * 会阻塞命令处理,排查时优先分批扫描,并限制后续读取的数据量。

继续阅读:TTL、覆盖与缓存行为。参考:EXPIRE、SCAN。

Redis 键数量查询 ​

redis 工具 ​

查询多少key ​

下方地址、键名和数量来自原笔记历史会话,本轮未连接该实例;不要把固定数量当作当前环境的预期值。

  • INFO keyspace:查看各非空库的键统计
  • dbsize:当前库key 数量
  • keys 线上不推荐
shell
# 本地虚构数据示例
127.0.0.1:6379> info keyspace
# Keyspace
db0:keys=10,expires=2,avg_ttl=60000
127.0.0.1:6379> del example:task
(integer) 1

继续阅读