实现操作的幂等的方法
因为网络、服务器等等这些不确定的因素,重试请求是普遍存在并且不可避免的。
(前端页面上应该防止用户重复提交表单,但是,网络错误会导致重传,很多 RPC 框架、网关都会有自动重试机制,所以重复请求这个事儿,是没办法完全避免的。)
三个方法
1,利用数据库的主键约束
比如创建订单,可以通过预先生成订单号,然后利用数据库中订单号的唯一约束这个特性,避免重复写入订单,实现创建订单服务的幂等性。
2,乐观锁
对于更新订单,可以通过一个版本号机制,每次更新数据前校验版本号,更新数据同时自增版本号,这样的方式,来解决 ABA 问题,确保更新订单服务的幂等性。
3,缓存中校验唯一性
每次请求之前必须先生成一个唯一的请求id,服务端将该id暂时放入redis。客户端请求时必须携带上这个id,接口会首先到redis中查询,如何有的话就继续后续的处理逻辑,同时删除该id,没有的话就直接返回错误或成功。
网友评论