幂等性(防重复提交)

文章目录

  • [1. 实现原理](#1. 实现原理)
  • 2.使用示例
  • [3. @Idempotent注解](#3. @Idempotent注解)
  • [4. debug过程](#4. debug过程)

主要用途:防止用户快速双击某个按钮,而前端没有禁用,导致发送两次重复请求。

1. 实现原理

幂等性要求参数相同的方法在一定时间内,只能执行一次。本质上是基于redis的分布式锁。大体有以下步骤:

  • 方法执行前,利用MD5算法(不仅限于此),将方法名 + 方法参数计算获得一个key
  • 查询redis的key是否存在
    • 存在,则不执行方法
    • 不存在,将key存到redis,并设置过期时间,接着执行方法
  • 需要注意方法执行的时间不能超过过期时间

2.使用示例

在Controller添加@Idempotent注解即可。

3. @Idempotent注解

  1. DefaultIdempotentKeyResolver默认的key解析器
java 复制代码
public class DefaultIdempotentKeyResolver implements IdempotentKeyResolver {

    @Override
    public String resolver(JoinPoint joinPoint, Idempotent idempotent) {
    // 获得方法名
        String methodName = joinPoint.getSignature().toString();
        // 将参数拼接成字符串
        String argsStr = StrUtil.join(",", joinPoint.getArgs());
        // md5计算一个key
        return SecureUtil.md5(methodName + argsStr);
    }

}
  1. 对应AOP切面类IdempotentAspect
    核心代码如下:
  2. 生成的key加了前缀"idempotent",参看IdempotentRedisDAO。

4. debug过程

进入resolver方法里面

相关推荐
echoVic12 分钟前
多模型支持的架构设计:如何集成 10+ AI 模型
java·javascript
橙露13 分钟前
Java并发编程进阶:线程池原理、参数配置与死锁避免实战
java·开发语言
echoVic15 分钟前
AI Agent 安全权限设计:blade-code 的 5 种权限模式与三级控制
java·javascript
PPPPickup17 分钟前
easymall---图片上传以及图片展示
java
历程里程碑20 分钟前
Linux 库
java·linux·运维·服务器·数据结构·c++·算法
Wpa.wk20 分钟前
接口自动化 - 接口鉴权处理常用方法
java·运维·测试工具·自动化·接口自动化
Pluchon23 分钟前
硅基计划4.0 简单模拟实现AVL树&红黑树
java·数据结构·算法
2501_9160088924 分钟前
深入解析iOS机审4.3原理与混淆实战方法
android·java·开发语言·ios·小程序·uni-app·iphone
wxin_VXbishe31 分钟前
C#(asp.net)学员竞赛信息管理系统-计算机毕业设计源码28790
java·vue.js·spring boot·spring·django·c#·php
一个网络学徒34 分钟前
python5
java·服务器·前端