golang redis lua脚本扣减失效(反馈类型interface问题)

先说问题点
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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容