分布式系统接口幂等校验

方案一:redis+token

单独提供一个获取token的接口(生成随机token后写入redis),前端每次请求业务接口时,先调用获取token的接口拿到token,然后带着token去请求业务接口,业务中判断,如果redis中存在此token的话,那就删除,正常执行业务。如果没有的话证明已经执行过一次了,属于重复请求。

        注意:1,del时要判断如果del结果返回-1,证明删除失败,已经被其他请求过了,属于重复请求

                   2,用户不刷新页面不获取新token(无论前后端生成的token),这样可以cover住大部分场景。

 

方案二:分布式锁

              接口参数 + session敏感信息拼接成lock key ,setnx 成功,执行业务逻辑,然后释放(比对随机生成的lock value),sexnx失败,那就是重复请求。

 

方案三:数据库唯一索引

 

问题待定:

Gavin.Lee:
用token方式去做的话,select token is exist 接着就得del,然后判断del 返回。用分布式锁的执行完业务以后再去释放lock

Gavin.Lee:
如果用token方式做幂等,重试的话每次重试只需要生成不同的token请求即可???

     

posted @ 2020-09-15 19:44  梦飞翔up  阅读(568)  评论(0编辑  收藏  举报