下面代码兼容了(key 不存在,key不是int类型,num为null)情况,均以扣减失败返回。

函数返回值说明:-1 表示扣减失败,大于等于0 表示扣减成功后剩余的数量。

public long decrBy(String key, Integer num) {
        if(num == null) {
            return -1;
        }
        String script = "if(redis.call('object', 'encoding', KEYS[1]) == 'int') then " +
                "local now = redis.call('get', KEYS[1]) - ARGV[1]; " +
                "if (now >= 0) then " +
                "redis.call('set', KEYS[1], now); " +
                "return now; " +
                "end; " +
                "end; " +
                "return -1;";
        RScript rscript = redissonClient.getScript();
        return rscript.eval(RScript.Mode.READ_WRITE, script, RScript.ReturnType.INTEGER, Arrays.asList(key), num);
    }