Spring Boot自定义Annotation实现接口自动幂
在实际的开发项目中,一个对外暴露的接口往往会面临很多次请求,我们来
解释一下幂等的概念:任意多次执行所产生的影响均与一次执行的影响相
同。按照这个含义,最终的含义就是
对数据库的影响只能是一次性的,不能重复处理。如何保证其幂等性,通
常有以下手段:
1. 数据库建立唯一性索引,可以保证最终插入数据库的只有一条数据
2. token机制,每次接口请求前先获取一个token,然后再下次请求的时候
在请求的header体中加上这个token,后台进行验证,如果验证通过删
除token,下次请求再次判断token
3. 悲观锁或者乐观锁,悲观锁可以保证每次for
update的时候其他sql无法update数据(在数据库引擎是innodb的时候,se
lect的条件必须是唯一索引,防止锁全表)
4. 先查询后判断,首先通过查询数据库是否存在数据,如果存在证明已经
请求过了,直接拒绝该请求,如果没有存在,就证明是第一次进来,直
接放行。
redis实现自动幂等的原理图: