概述
幂等就是一个操作,不论执行多少次接口,产生的效果和返回的结果是一样的
实现方式
压测工具: jmeter
1、查询操作
查询一次或者查询多次,在数据不变的情况下,查询结果是一样的。select是天然的幂等操作
2、删除操作
删除操作也是幂等的,删除一次和删除多次都是把数据删除。(返回的结果不一样,数据不存在返回0,删除多天数据,返回结果也是多个)
3、唯一索性,防止新增脏数据
4、token机制
流程
1.1、客户端向服务端获取token,服务端将token存入redis;
1.2、客户端将token放到header或作为请求参数请求接口,做业务请求;
1.3、服务端判断token是否存在redis。不存在token代表重复请求,不进行业务处理,返回重复标记;如果存在token,代表第一次操作,进行业务逻辑并删除token
特点:要申请,一次有效性,可以限流
注意:redis要用删除操作来判断token,删除成功代表token校验通过,如果用select+delete来校验token,存在并发问题,不建议使用
//代码实现
@Service
public class TokenServiceImpl implements TokenService {
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Override
public String getToken() {
//获取全局唯一id
long nextId = SnowflakeUtil.nextId();
//存入redis,设置10分钟失效
stringRedisTemplate.opsForValue().set(String.valueOf(nextId), UUID.randomUUID().toString(),10, TimeUnit.MINUTES);
return String.valueOf(nextId);
}
/**
* 删除记录,true表示第一次提交,false重复提交
*/
@Override
public Boolean checkToken(String token) {
return stringRedisTemplate.delete(token);
}
}