redisによる重複コミット防止、ソリューションの成功


1、業務シーン
ビジネス開発では、フロントエンドの操作を繰り返し検証し、重複コミットによるデータ重複操作を回避することがよくあります.例えば、振り替え操作は、ネットカートンのため、お客様は振り替えボタンを連続的にクリックし、何度も振り替えた.また、例えば、連点「核保険」操作は、制限をしなければ、核保険が通過し、積分下発機能があれば、下発積分を繰り返す可能性がある.
2、基礎解決方案
通常、データベース・レベルでデータ検証を行いますが、同時操作では望ましくありません.
3、解決策
本稿では,redisを用いて,繰返しコミットの判断と阻止を実現する.
実装コード:
        //        
        if(...){
            return new DataVO<>("      ");
        }

		//            
        String key = "checkInsurance_" + orderId;
        boolean flag = stringRedisTemplate.getConnectionFactory().getConnection().setNX(key.getBytes(), orderId.getBytes());

        if (!flag) {
            log.error("        ,    orderId:{},userId:{}", orderId, userId);
            return new DataVO<>("       , 3     ");
        }
        
        stringRedisTemplate.expire(key, 180, TimeUnit.SECONDS);

        try{
            ...
        }catch(Exception e){
             e.printStackTrace();
        }finally{
            stringRedisTemplate.delete(key);
        }