您的位置:首页 > 数据库 > Redis

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

2017-07-07 10:29 218 查看
实现重复提交方式有很多种类,这里仅仅写一个用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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java redis