GET 是什么
GET 读取字符串键的值,键不存在返回空值,键存在但类型不是字符串则直接报类型错误——这一点很关键,它把「键不存在」和「键存在但类型不对」明确区分开。在它的基础上还派生出两个变体:读后即删,适合一次性令牌与验证码;读时顺手改过期时间,适合会话续期,两者都是原子的单条命令。
基本信息
| 用途 | 读取字符串键的值 |
|---|---|
| 语法 | GET 键 / GETDEL 键 / GETEX 键 [EX 秒|PX 毫秒|EXAT 时间戳|PERSIST] |
| 返回值 | 字符串值、空值或类型错误 |
| 读后即删 | 读取的同时删除键,适合一次性凭据 |
| 读时改期 | 读取的同时延长或取消过期 |
| 版本要求 | 读后即删与读时改期需要较新的服务端版本 |
典型使用场景
- 读缓存:命中直接返回,未命中回源并回填
- 一次性令牌校验:读取后立即删除,避免重复使用
- 验证码核对:读一次即焚,防止被刷
- 会话续期:每次访问顺带延长会话过期时间
- 排查键是否存在:区分键不存在与值为空串
- 调试排障:确认写入的值与预期一致
示例
示例
SET session:abc token123 EX 600 # 先写入一个带过期的会话
GET session:abc # 返回 token123
GETEX session:abc EX 1800 # 读出并把过期延长到 30 分钟
GETEX session:abc PERSIST # 读出并取消过期,变成持久键
GETDEL sms:code:13800000000 # 验证码读一次即焚
TYPE session:abc # 报类型错误之前先用它确认键的类型返回情况读法
| 返回 | 含义 | 处理 |
|---|---|---|
| 字符串值 | 键存在且类型匹配 | 正常返回给调用方 |
| 空值 | 键不存在或已过期 | 回源查询并考虑回填 |
| 类型错误 | 键存在但类型不是字符串 | 先确认类型并改用对应命令 |
| 空字符串 | 键存在且值就是空串 | 与键不存在不同,业务分支要区分 |
| 读后即删返回空值 | 键已被删除或本来不存在 | 说明一次性凭据已使用过 |
| 读时改期返回空值 | 键不存在,改期也没发生 | 按未命中处理 |
键不存在与值为空字符串是两回事:返回空值表示键不存在或已过期,返回空字符串表示键存在、值就是空串,客户端逻辑必须把这两种情况分开处理。
对哈希、列表等类型执行字符串读取会直接报类型错误;排查时先用类型命令确认键的类型,再改用对应的读取命令。
读后即删在读取的同时完成删除,是原子的,适合一次性凭据;如果先读再删,中间失败会导致凭据被重复使用。
读取检查清单
- 确认键的类型与读取命令匹配
- 空值分支要有明确处理:回源、报错还是返回默认值
- 区分键不存在与空字符串两种返回值
- 一次性凭据用读后即删,不要拆成两步
- 会话续期用读时改期,减少一次额外命令
- 高频热键读取要关注实例读压力与热点分布
热点键被高频读取时,单实例的读压力会集中在一个分片上;这类场景要结合客户端缓存或读副本一起设计,而不是单纯加机器。