实现重复提交方式有很多种类,这里仅仅写一个用redis来防止重复提交的方式.redis是单进程单线程的
我们是利用setNX来实现用户在执行完成指定业务逻辑之后,才可以在再次执行该业务逻辑
- RedisConnection redis=redisTemplate.getConnectionFactory().getConnection();
- //获取当前时间
- Date currentTime=new Date();
- Calendar c=Calendar.getInstance();
- c.setTime(currentTime);
- c.add(Calendar.MINUTE, 10);
- //setNX如果这个KEY存在那个为TURE否者为false,我们把这个键的值设置为当时的时间加上10分钟,这样如果下次请求如果发现Value的值大于当前时间10分钟
- //,那么我们可以用getSet重新设定新的锁.
- //redis是单进程单线程的
- if(!redis.setNX((String.valueOf(asdf)+"_investment").getBytes(), (String.valueOf(c.getTimeInMillis())).getBytes())){
- byte [] value= redis.get((String.valueOf(asdf)+"_investment").getBytes());
- Date valueTimeOut= new Date(Long.parseLong(new String (value)));//获得锁过期时间
- if(currentTime.compareTo(valueTimeOut)>0){//锁已经过期
- //重新设置新的锁
- redis.getSet((String.valueOf(asdf)+"_investment").getBytes(),(String.valueOf(c.getTimeInMillis())).getBytes());
- }else{
-
-
- return "REAPAT_SUBMIT";
- }
- }
-
- //开始执行投资逻辑
- // Object investBus= pjp.proceed();//投资逻辑
-
- System.out.println("开始所谓的投资逻辑");
-
-
- redis.del((String.valueOf(asdf)+"_investment").getBytes());
-
- redis.close();
-
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。