微信公众号运营团队怎么查看竞争网站怎么做的seo
2026/3/22 1:38:37 网站建设 项目流程
微信公众号运营团队,怎么查看竞争网站怎么做的seo,时事新闻热点,网站seo优化外包【幂等性】分布式系统基石#xff1a;深入解析幂等性设计与实现方案 人生没有太晚的开始 文章目录【幂等性】分布式系统基石#xff1a;深入解析幂等性设计与实现方案前言一、概念定义——什么是幂等#xff1f;二、保证幂等解决方案1.前端置灰按钮#xff08;不能保证幂等…【幂等性】分布式系统基石深入解析幂等性设计与实现方案人生没有太晚的开始文章目录【幂等性】分布式系统基石深入解析幂等性设计与实现方案前言一、概念定义——什么是幂等二、保证幂等解决方案1.前端置灰按钮不能保证幂等2.数据库唯一索引Unique Key3.乐观锁4.防重Token令牌5.分布式锁6.状态机幂等Status Machine—— 业务层面的优雅总结与最佳实践前言用户在手机弱网环境下买东西点击“立即支付”界面转圈圈没反应。用户心急又点了一次。浏览器发出了两次请求如果后端没有幂等处理用户就会被扣两次款。这在生产环境中是 P0 级事故。为了解决这个问题我们需要引入“幂等性”。一、概念定义——什么是幂等定义对同一个系统使用同样的条件一次请求和重复的多次请求对系统资源的影响是一致的。生活中的例子电梯按钮幂等 你按一次“10楼”电梯去10楼你狂按一百次电梯还是去10楼不会飞出去。取款非幂等 你取100块卡里少100你连取两次卡里少200。HTTP 语义中的幂等GET查询天然幂等。PUT更新通常是幂等的把 A 改成 1改多少次 A 都是 1。POST新增非幂等每次调用都会创建新资源这是我们要防范的重点。二、保证幂等解决方案1.前端置灰按钮不能保证幂等当用户点击了一次扣款按钮后前端将按钮置成灰色防止用户提交两次。问题可以通过postman等工具重复发送请求当网络波动时通常会有重试机制导致重复发送2.数据库唯一索引Unique Key这是博主在项目中使用的一种方式通过设置了唯一索引就算多个重复请求数据库会抛出异常保证了幂等性。适用插入型操作防重例如插入一条新订单不会插入两条。缺点 依赖数据库分库分表时需要注意路由。3.乐观锁原理 update t_goods set count count - 1, version version 1 where id 1 and version 1。核心 带上版本号。如果别人改过了版本号变了你的 SQL 就不生效。适用 更新库存、扣款。4.防重Token令牌原理进入页面前先请求后端拿一个 Token。后端从redis拿一个Token返回。前端提交表单时带上这个 Token。后端执行 Redis.del(Token)。如果删除成功返回1说明是第一次进入业务流程如果删除失败返回0说明已经提交过了。核心在业务流程开始前进行了幂等判断而不是像第一种数据库唯一索引那种方法在业务中抛异常来确保幂等。5.分布式锁原理类似于防重Token令牌也是在业务进行前进行幂等处理业务执行前先抢锁key业务唯一ID执行完释放锁。注意点 锁要设过期时间防死锁还要考虑一下看门狗机制的引入防止业务流程还没有完成就释放了锁6.状态机幂等Status Machine—— 业务层面的优雅这个例子有点像乐观锁这个方案的核心在于流程不可逆利用当前状态做天然屏障。生活中的例子快递状态待发货 - 已发货 - 已签收。如果现在的状态是 已发货你发来一个指令说“把状态改为已发货”系统执行也没事结果不变。如果现在的状态是 已签收你发来一个指令说“把状态改为已发货”系统直接拒绝因为流程不能倒着走。技术实现细节这是最优雅、性能最好的方案因为它不依赖 Redis直接利用业务数据库的行锁。SQL 的魔法 不要先 SELECT 查状态再 Java 判断再 UPDATE这会有并发缝隙。 要直接把条件写在 UPDATE 语句里。UPDATE ordersSETstatusPAIDWHEREid123ANDstatusPENDING;只能由PENDING变为PAID不可能倒过来。总结与最佳实践不要过度设计 不是所有接口都要幂等查询接口不需要QPS 很低且允许少量重复的后台接口也没必要搞太复杂。唯一 ID 是关键 无论是哪种方案都需要一个全局唯一的 ID来标识“这是同一个请求”。推荐组合 这里的“银弹”通常是 Token 机制防误触 数据库唯一索引兜底。以上就是幂等的内容了有任何不足欢迎大佬指正。如果文章对您有所帮助请务必点赞收藏您的支持就是我的最大动力

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询