分享

使用redis实现防止重复提交,成功解决方案

 vnxy001 2019-02-28

1、业务场景

业务开发中,常常涉及对前端操作进行重复校验,避免重复提交造成数据重复操作。比如转账操作,因为网络卡顿,客户连续点击转账按钮,造成多次转成;又比如,连点"核保"操作,如果不做限制,核保通过,如有积分下发功能,有可能会重复下发积分。

2、基础解决方案

通常,我们在数据库层面进行数据校验,但是并发操作下,并不理想。

3、解决方案

本文,使用redis,实现对重复提交进行判断和阻止。

实现代码:

  1. //数据库层面的校验
  2. if(...){
  3. return new DataVO<>("已经提交核保");
  4. }
  5. //核保防止同一时间多次点击
  6. String key = "checkInsurance_" + orderId;
  7. String flag = stringRedisTemplate.opsForValue().get(key);
  8. if ("1".equals(flag)) {
  9. log.error("前段连续提交核保,已被阻止orderId:{},userId:{}", orderId, userId);
  10. return new DataVO<>("您连续提交核保,请3分钟后再试");
  11. }
  12. stringRedisTemplate.opsForValue().set(key, "1");
  13. stringRedisTemplate.expire(key, 180, TimeUnit.SECONDS);
  14. try{
  15. ...
  16. }catch(Exception e){
  17. e.printStackTrace();
  18. }finally{
  19. stringRedisTemplate.delete(key);
  20. }

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多