首页/数据/数据库速查/GET 与 GETDEL/GETEX 取值
Redis 命令96 条

GET 与 GETDEL/GETEX 取值

GET 读取字符串值(键不存在返回 nil,类型不对报 WRONGTYPE);GETDEL 读后即删、GETEX 读时顺手改过期,适合一次性令牌场景。

数据库速查数据更新于 2026-10-13

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   # 报类型错误之前先用它确认键的类型

返回情况读法

返回含义处理
字符串值键存在且类型匹配正常返回给调用方
空值键不存在或已过期回源查询并考虑回填
类型错误键存在但类型不是字符串先确认类型并改用对应命令
空字符串键存在且值就是空串与键不存在不同,业务分支要区分
读后即删返回空值键已被删除或本来不存在说明一次性凭据已使用过
读时改期返回空值键不存在,改期也没发生按未命中处理
键不存在与值为空字符串是两回事:返回空值表示键不存在或已过期,返回空字符串表示键存在、值就是空串,客户端逻辑必须把这两种情况分开处理。
对哈希、列表等类型执行字符串读取会直接报类型错误;排查时先用类型命令确认键的类型,再改用对应的读取命令。
读后即删在读取的同时完成删除,是原子的,适合一次性凭据;如果先读再删,中间失败会导致凭据被重复使用。

读取检查清单

  • 确认键的类型与读取命令匹配
  • 空值分支要有明确处理:回源、报错还是返回默认值
  • 区分键不存在与空字符串两种返回值
  • 一次性凭据用读后即删,不要拆成两步
  • 会话续期用读时改期,减少一次额外命令
  • 高频热键读取要关注实例读压力与热点分布
热点键被高频读取时,单实例的读压力会集中在一个分片上;这类场景要结合客户端缓存或读副本一起设计,而不是单纯加机器。

易错点

  • 把空值当成空字符串处理:业务判断出现分支漏洞,误把不存在的键当成存在的空对象
  • 对非字符串类型直接读取:报类型错误并中断调用链,读取前应先确认键的类型
  • 用先读再删两步处理一次性凭据:中间失败会造成凭据重复使用,应改用读后即删的单条命令
  • 续期时先普通读取再设置过期:两步之间键可能已经到期,应优先使用读时改期的单条命令
  • 缓存未命中后忘记回填:热点键反复穿透到数据库,把压力转移到后端存储

数据来源与参考

  • Redis 官方文档: GET
  • Redis 官方文档: GETDEL
  • Redis 官方文档: GETEX

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌