golang redis lua脚本扣减失效(反馈类型inter

2024-03-20  本文已影响0人  哆啦在这A梦在哪

先说问题点
redis 的result 方法反馈的是 interface ,所以比较有问题

1.执行的 lua 脚本

var (
    // 对应的可使用种草任务数量减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 调用 redis eval执行

注意
注意
注意
这里的 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
上一篇 下一篇

猜你喜欢

热点阅读