先說問題點
redis 的result 方法反饋的是 interface ,所以比較有問題
1.執(zhí)行的 lua 腳本
var (
// 對應(yīng)的可使用種草任務(wù)數(shù)量減1
CompanyTaskDeductionLua = `
local test = tonumber(redis.call('GET', KEYS[1]))
if test and test > 0 then
redis.call('DECR', KEYS[1])
return 1
else
return 0
end`
)
2. golang 調(diào)用 redis eval執(zhí)行
注意
注意
注意
這里的 result 反饋的是值讯壶,不能直接比較,因為他是 interface 類型遵岩,就算反饋的是 lua 中的 return 0,你用 res == 0或者字符串 res == “0” 都不能進行比較巡通,而且尘执,如果使用 String 方法獲取的是 lua 腳本的本身
res, err := rdb.Eval(ctx, CompanyTaskDeductionLua, []string{RedisCompanyTaskPre + taskId}).Result()
if err != nil {
return err
}
b, err := json.Marshal(res)
if err != nil {
return err
}
if string(b) == "0" {
return errors.New("decr task err")
}
return nil