首页/数据/数据库速查/一次性取值模式(GETDEL / GETEX PERSIST)
本包目录(495 条)
MySQL 基础与连接36 条SQL 语法52 条用户与权限21 条备份与恢复56 条主从复制与高可用53 条性能与调优57 条
Redis 命令96 条
Redis 运维与场景124 条

一次性取值模式(GETDEL / GETEX PERSIST)

短信验证码、单次 token 这类「读过即废」的语义用 GETDEL 原子完成;需要续期用 GETEX,避免 GET+EXPIRE 两条命令之间的竞态。

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

验证码校验流程

验证码校验流程
SET sms:login:13900000000 888888 EX 300
# 校验通过后原子取出并删除,防重放
GETDEL sms:login:13900000000   # "888888",同时键删除
GET sms:login:13900000000      # (nil)

# 滑动续期:读的同时延长
GETEX session:web:u88 EX 1800
GETDEL返回旧值并删除(原子)
GETEX返回旧值并更新过期时间/取消过期
替代GET+DEL 两条命令有竞态窗口
GETDEL 与 Lua 脚本里的 GET+DEL 等价;客户端库版本旧没有 GETDEL 时可用 Lua 或事务替代。

易错点

  • 用 GET + DEL 两步校验验证码:并发下同一验证码可能被用两次
  • GETEX 带 EXAT 时时间戳算错(单位秒),导致键立即过期

数据来源与参考

  • Redis 官方文档: GETDEL
  • Redis 官方文档: GETEX
  • Redis 官方文档: 过期时间

相关工具

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