Redis怎样利用Lua为多个Key同步续期

EXPIRE无法原子续期多个key,因单命令仅支持一个key且网络异常会导致错期;必须用Lua脚本通过EVAL原子执行PEXPIRE批量续期,确保一致性。为什么 EXPIRE 不能直接用于多个 Key 的原子续期Redis 单个 EXPIRE 命令只能操作一个 key,而网络往返、客户端重试、中间失败都会导致多个 key 的过期时间不同步。比如你先对 order:123 续期,再对 order:123:lock 续期,中间若断连或超时,两个 key 就会"错期"------一个还活着,一个已过期,业务逻辑就可能出乱子。真正可靠的同步续期,必须靠服务端原子执行。Lua 脚本是唯一能保证多 key 操作在单次 Redis 执行中完成的方式。用 EVAL 执行 Lua 脚本批量续期的写法核心思路:把要续期的 key 列表和新 TTL 作为参数传入,脚本里遍历并统一调用 PEXPIRE(推荐用毫秒级,精度更高、避免秒级截断误差)。EVAL "for i=1,#KEYS do redis.call('PEXPIRE', KEYSi, ARGV1) end" 2 order:123 order:123:lock 30000KEYS 是 key 列表,ARGV1 是统一的新过期毫秒数(如 30000 表示 30 秒)注意:第一个数字 2 是 key 的数量,必须和实际传入的 key 个数一致,否则报错 ERR Error running script (call to f_...): @user_script:1: WRONGTYPE Operation against a key holding the wrong kind of value如果某个 key 不存在,PEXPIRE 返回 0,不影响其他 key,脚本继续执行续期前要不要先检查 key 是否存在?大多数场景下不用。续期动作本身是"保活",不是"创建"。如果 key 已被删,PEXPIRE 返回 0,脚本照常结束,客户端可据此判断是否需重建资源。强行加 EXISTS 判断反而增加复杂度,且无法规避"检查后被删"的竞态。但有例外:如果你依赖 key 存在作为业务状态标识(比如 user:456:session 必须存在才允许续期),那就得在脚本里显式判断: Vozo Vozo是一款强大的AI视频编辑工具,可以帮助用户轻松重写、配音和编辑视频。

相关推荐
音符犹如代码14 分钟前
Arthas Profiler 火焰图实战:CPU 热点在哪一目了然
java·jvm·spring boot
CodexDave29 分钟前
Python 自动化接单实战(一):把 CSV 需求做成配置驱动解析器
java·python·自动化·json·数据清洗·python自动化·csv处理
Y38153266235 分钟前
2026 年 7 月,SERP API 调用的稳定性实战:超时、重试、降级
开发语言·数据库·人工智能·php
sugar__salt41 分钟前
向量数据库从零到实战:用 Milvus + Zilliz 构建 AI 日记语义检索系统
数据库·人工智能·embedding·milvus·rag·zilliz
m沐沐44 分钟前
【深度学习】循环神经网络RNN——结构、原理与长期依赖问题解析
人工智能·pytorch·python·rnn·深度学习·算法·机器学习
风吹心凉1 小时前
python3基础2026.7.28
开发语言·python
Gauss松鼠会1 小时前
Prometheus 实现 openGauss 的指标监控(二)Prometheus 中添加 openGauss指标
网络·数据库·oracle·prometheus·opengauss·经验总结
曲无忆1 小时前
LLMs赋能依赖类型证明自动化
python
Cloud云卷云舒1 小时前
PolarDB(阿里云)VS HaishanDB(海山数据库,移动云)的AI能力全面对比
数据库·阿里云·ai-native·polardb·haishandb
一次旅行1 小时前
act本地预跑GitHub Actions:Python项目完整CI/CD流水线实战
python·ci/cd·github