美文网首页
golang redis lua脚本扣减失效(反馈类型inter

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

作者: 哆啦在这A梦在哪 | 来源:发表于2024-03-20 17:32 被阅读0次

先说问题点
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

相关文章

网友评论

      本文标题:golang redis lua脚本扣减失效(反馈类型inter

      本文链接:https://www.haomeiwen.com/subject/wubxtjtx.html