阿里面试官:接口的幂等性怎么设计?
程序员书单
共 1733字,需浏览 4分钟
·
2021-05-20 03:07
点击蓝色“黄小斜学Java”关注我哟
加个“星标”,每天和你一起多进步一点点!
一、什么是幂等?
二、使用幂等的场景
1、前端重复提交
2、接口超时重试
3、消息重复消费
三、解决方案
1、token 机制实现
客户端会先发送一个请求去获取 token,服务端会生成一个全局唯一的 ID 作为 token 保存在 redis 中,同时把这个 ID 返回给客户端 客户端第二次调用业务请求的时候必须携带这个 token 服务端会校验这个 token,如果校验成功,则执行业务,并删除 redis 中的 token 如果校验失败,说明 redis 中已经没有对应的 token,则表示重复操作,直接返回指定的结果给客户端
对 redis 中是否存在 token 以及删除的代码逻辑建议用 Lua 脚本实现,保证原子性 全局唯一 ID 可以用百度的 uid-generator、美团的 Leaf 去生成
2、基于 mysql 实现
建立一张去重表,其中某个字段需要建立唯一索引 客户端去请求服务端,服务端会将这次请求的一些信息插入这张去重表中 因为表中某个字段带有唯一索引,如果插入成功,证明表中没有这次请求的信息,则执行后续的业务逻辑 如果插入失败,则代表已经执行过当前请求,直接返回
3、基于 redis 实现
客户端先请求服务端,会拿到一个能代表这次请求业务的唯一字段 将该字段以 SETNX 的方式存入 redis 中,并根据业务设置相应的超时时间 如果设置成功,证明这是第一次请求,则执行后续的业务逻辑 如果设置失败,则代表已经执行过当前请求,直接返回
总结
— 【 THE END 】— 本公众号全部博文已整理成一个目录,请在公众号里回复「m」获取! 最近面试BAT,整理一份面试资料《Java面试BATJ通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。
获取方式:点“在看”,关注公众号并回复 PDF 领取,更多内容陆续奉上。
文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)
评论