local userid=KEYS[1];
local prodid=KEYS[2];
local qtkey="commodity:"..prodid;
local usersKey="snapped"..prodid;
local userExists=redis.call("sismember",usersKey,userid);
if tonumber(userExists)==1 then
return 2;
end
local num= redis.call("get" ,qtkey);
if tonumber(num)<=0 then
return 0;
else
redis.call("decr",qtkey);
redis.call("sadd",usersKey,userid);
end
return 1;
java代码 使用spring-boot-data-redis-starter
先添加一个DefaultRedisScript
@Bean
public DefaultRedisScript<Long> redisScript() {
DefaultRedisScript<Long> redisScript = new DefaultRedisScript<>();
redisScript.setScriptSource(new StaticScriptSource(script));
redisScript.setResultType(Long.class);
return redisScript;
}
使用
==注意要使用long而不是integer,lua中的int对应java中的long==
Long execute = redisTemplate.execute(defaultRedisScript,List.of(uid.toString(),"1101"));