redis简单的解决小并发方法

/**
     * 参与抽奖  下单
     */
    @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));
    }

//最简单的方法,影响性能,并发特别大的慎用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章