下面代码兼容了(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);
}