其他

85 阅读1分钟

一、接口多次调用接口不一致?如何保证幂等性

1>token机制

  1. 服务端提供获取token的接口,根据业务实际情况,哪个业务需要保证幂等性,执行前先去获取token,服务器把token保存到redis里
  2. 调用业务请求时,把token带上,一般是放到header里
  3. 服务端判断是否存在redis里,存在则表示第一次,然后删除,继续执行业务逻辑
  4. 判断token不存在,直接返回提示给客户端,保证不重复提交

后删除redis: 执行完业务逻辑,删除,可能删除失败,再过来请求会重复,这个问题实际就是数据库和redis数据不一致的问题。

先删除redis: 如果业务执行异常,调用方又发起重试,认为是重复,无法处理业务了。出现业务异常可以尝试重新获取token。

缺点:在实际场景中,1万的请求可能之后10个请求会有重复,为了这10个,其余的相当于多走了一层请求。

2>分布式锁实现 在每次执行之前判断一下,是否可以获取分布式锁,如果可以表示第一次执行,否则舍弃请求。 必须保证key是业务的唯一标示。分布式锁有性能消耗,也要考虑down机或者不一致的情况。

3>防重表唯一索引

每次执行插入唯一id,插入失败则抛出异常。

二、线上问题排查定位几个案例