You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Redis Lua脚本中使用GETEX替代GET+EXPIRE实现单调用

解决方案

正确的Lua脚本实现如下:

local key = ARGV[1]
local ttl = tonumber(ARGV[2])

return redis.call("GETEX", key, "EX", ttl)

问题原因分析

你之前的两种写法都存在问题:

  • 第一种写法未将ARGV[2]传入的ttl转为数字类型。Redis的GETEX命令中,EX选项要求后续参数是数字格式的秒数,而从ARGV获取的参数默认是字符串,直接传递会导致命令执行失败。
  • 第二种写法省略了EX标识,不符合GETEX的命令语法——Redis需要明确知道你要设置的是秒级过期(EX)还是毫秒级过期(PX),缺少这个标识无法正确解析参数。

逻辑匹配说明

这个单调用的脚本和你原来的逻辑完全一致:

  • 当key存在时,返回key的值并为其设置指定的秒级过期时间;
  • 当key不存在时,返回nil,不会执行任何额外操作。

内容的提问来源于stack exchange,提问作者Aryan Chhetri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 12:34:57