fix(lua): 改进 dictReplace key 存在性检查逻辑

修复 shared_dict.replace() 方法对过期 key 的判断:
- 区分 key 不存在和 key 存在但已过期的情况
- Get() 返回 val="" 且 expired=false 表示 key 不存在
- 先检查不存在情况,再检查过期情况

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
xfy 2026-04-20 08:26:50 +08:00
parent 5a5f733cb4
commit d856e3c570

View File

@ -278,9 +278,20 @@ func dictReplace(L *glua.LState) int {
ttl = time.Duration(L.CheckNumber(4)) * time.Second
}
// 检查是否存在
_, expired, _ := dict.Get(key)
// 检查是否存在Get 返回: value, expired, error
// expired=true 表示存在但已过期expired=false 表示不存在或存在且未过期
// 需要区分不存在和存在的情况
val, expired, _ := dict.Get(key)
// 如果 val 为空且 expired 为 false表示 key 不存在
// 如果 expired 为 true表示 key 存在但已过期(也算不存在)
if val == "" && !expired {
// key 不存在
L.Push(glua.LFalse)
L.Push(glua.LString("not found"))
return 2
}
if expired {
// key 存在但已过期,也算不存在
L.Push(glua.LFalse)
L.Push(glua.LString("not found"))
return 2