1、什么是幂等性:
个人理解:幂等就是一个操作,无论执行多少次,产生的效果和返回的结果都是一样的,开发中常遇到的譬如重复提交、防止支付和付款接口的重复调用问题。
2、解决方案:
2.1、项目内部接口:可借助redis实现幂等,举例:之前的一个银行项目中,用户进行抽奖时要设置防重操作,可以借助redis的setNx指令,在redis2.8之后redis的setNx指令加入了expire指令,实现了原子性操作,避免了指令分开执行非原子性问题,方案:在用户进行抽奖时取用户的抽奖资格号作为setnX的值并设值3秒的过期时间(3秒防重),在3秒内如果用户拿同一抽奖资格号来抽奖,则返回错误码及提示信息"请不要重复点击!"。
2.2、提供给外部的接口:主要通过source来源,seq序列号,source+seq在本系统数据库里面组成唯一索引。举例:之前交易系统提供的付款接口,防止多次重复付款,source+seq在接口提供方做为数据库的唯一索引,第三方调用接口时必传source+seq这两个值,当第三方调用本系统接口时,先去数据库查询是否处理过,如果处理过,直接返回处理的结果,不进行后需的业务流程,如果没有处理,则进行后续的业务流程。
欢迎分享和指正,谢谢!
本文探讨了幂等性的概念,即一个操作执行多次结果保持不变,这在开发中对于处理重复提交和接口调用至关重要。解决方案包括利用Redis的setNX实现内部接口的幂等性,以及通过source和seq组合确保外部接口的唯一性。具体实践案例涉及抽奖系统和支付接口的防重复策略。
1015

被折叠的 条评论
为什么被折叠?



