package
com.redis.secondskill;
import
java.util.HashSet;
import
java.util.Set;
import
redis.clients.jedis.HostAndPort;
import
redis.clients.jedis.Jedis;
import
redis.clients.jedis.JedisPool;
public
class
SS2 {
static
String luaScript =
"local userid=KEYS[1];\r\n"
+
"local prodid=KEYS[2];\r\n"
+
"local qtkey=‘sec:‘..prodid..\":count\";\r\n"
+
"local usersKey=‘sec:‘..prodid..\":user\";\r\n"
+
"local userExists=redis.call(\"sismember\",usersKey,userid);\r\n"
+
"if tonumber(userExists)==1 then \r\n"
+
" return 2;\r\n"
+
"end\r\n"
+
"local num = redis.call(\"get\" ,qtkey);\r\n"
+
"if tonumber(num)<=0 then \r\n"
+
" return 0;\r\n"
+
"else \r\n"
+
" redis.call(\"decr\",qtkey);\r\n"
+
" redis.call(\"sadd\",usersKey,userid);\r\n"
+
"end\r\n"
+
"return 1"
;
public
static
boolean
doSecKill(String uid,String prodid) {
JedisPool jedisPool = JedisPollTool.getInstance();
Jedis jedis = jedisPool.getResource();
String sha1 = jedis.scriptLoad(luaScript);
Object result= jedis.evalsha(sha1,
2
, uid,prodid);
String reString=String.valueOf(result);
if
(
"0"
.equals( reString ) ) {
System.err.println(
"已抢空!!"
);
}
else
if
(
"1"
.equals( reString ) ) {
System.out.println(uid +
"抢购成功!!!!"
);
}
else
if
(
"2"
.equals( reString ) ) {
System.err.println(
"该用户已抢过!!"
);
}
else
{
System.err.println(
"抢购异常!!"
);
}
JedisPollTool.distroy(jedisPool, jedis);
return
true
;
}
}