/**
* 参与抽奖 下单
*/
@RequestMapping(value="/participateInTreasure")
public AppDataModel_Sec participateInTreasure(IntegralTreasureEntity integralTreasureEntity){
AppDataModel k = null;
try {
IntegralTreasureController con = new IntegralTreasureController();
//执行分布式锁方法
Long longtime = new Date().getTime(); //获取当前时间,计算是否超时用,防止某一用户占用时间太长
Jedis jedis = new Jedis ("localhost",6379);
Long lock = jedis.setnx("usernames", longtime.toString());
System.out.println(jedis.get("usernames"));
if(lock <= 0){
System.out.println("有锁了,等会");
long chaoshi = Long.parseLong(jedis.get("usernames"));
Long l = (long)(new Date().getTime() - chaoshi);
System.out.println(l);
if(l>2000){
jedis.del("usernames");
//去掉时间重新插入key
Long lock1 = jedis.setnx("usernames", longtime.toString());
if(lock1 > 0) {
//加锁成功,开始执行方法体
System.out.println("执行方法体2="+integralTreasureEntity.getUserId());
k = integralTreasureService.addParticipateInTreasure(integralTreasureEntity);
}
jedis.del("usernames"); //执行结束干掉这个key
}else{
//未超时则返回网络繁忙,请稍后重试
System.out.println("网络繁忙,请稍后重试");
k=new AppDataModel();
k.setStatus(0);
k.setMessage("网络繁忙,请稍后重试");
}
}else{
if(lock > 0) {//lock为插入成功条数
//加锁成功,开始执行方法体
System.out.println("执行方法体1="+integralTreasureEntity.getUserId());
k = integralTreasureService.addParticipateInTreasure(integralTreasureEntity);
}
jedis.del("usernames"); //执行结束干掉这个key
}
} catch (Exception e) {
e.printStackTrace();
k=new AppDataModel();
k.setStatus(0);
k.setMessage("手慢了,您看中的奖品已经开奖啦!");
}
return getAppDataMode_sec().setData(encodeURI(k));
}
//最简单的方法,影响性能,并发特别大的慎用。