打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

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

实现重复提交方式有很多种类,这里仅仅写一个用redis来防止重复提交的方式.redis是单进程单线程的

我们是利用setNX来实现用户在执行完成指定业务逻辑之后,才可以在再次执行该业务逻辑

  1. RedisConnection  redis=redisTemplate.getConnectionFactory().getConnection();  
  2. //获取当前时间  
  3.  Date currentTime=new Date();  
  4.         Calendar c=Calendar.getInstance();  
  5.         c.setTime(currentTime);  
  6.         c.add(Calendar.MINUTE, 10);  
  7.         //setNX如果这个KEY存在那个为TURE否者为false,我们把这个键的值设置为当时的时间加上10分钟,这样如果下次请求如果发现Value的值大于当前时间10分钟  
  8. //,那么我们可以用getSet重新设定新的锁.  
  9. //redis是单进程单线程的  
  10.  if(!redis.setNX((String.valueOf(asdf)+"_investment").getBytes(), (String.valueOf(c.getTimeInMillis())).getBytes())){  
  11.              byte [] value= redis.get((String.valueOf(asdf)+"_investment").getBytes());  
  12.              Date valueTimeOut=  new Date(Long.parseLong(new String (value)));//获得锁过期时间  
  13.              if(currentTime.compareTo(valueTimeOut)>0){//锁已经过期  
  14.                  //重新设置新的锁  
  15.                  redis.getSet((String.valueOf(asdf)+"_investment").getBytes(),(String.valueOf(c.getTimeInMillis())).getBytes());  
  16.              }else{  
  17.                   
  18.                   
  19.                  return "REAPAT_SUBMIT";  
  20.              }  
  21.         }  
  22.           
  23.         //开始执行投资逻辑  
  24. //      Object investBus=  pjp.proceed();//投资逻辑  
  25.           
  26.         System.out.println("开始所谓的投资逻辑");  
  27.           
  28.           
  29.             redis.del((String.valueOf(asdf)+"_investment").getBytes());  
  30.           
  31.         redis.close();  
  32.          


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
redis限流的3种实现方式
通过BulkLoad的方式快速导入海量数据
redis与mysql数据同步
springboot+redis分布式锁
基于redis的高并发秒杀的JAVA-DEMO实现!
AP模式(Redis)的分布式锁分析以及实现
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服