redis setNX 锁来实现防止重复提交的

来源:互联网 发布:golang flag 用法 编辑:程序博客网 时间:2024/05/23 12:57

实现重复提交方式有很多种类,这里仅仅写一个用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();   


原创粉丝点击