浅谈幂等性和项目中幂等性解决方案

本文探讨了幂等性的概念,即一个操作执行多次结果保持不变,这在开发中对于处理重复提交和接口调用至关重要。解决方案包括利用Redis的setNX实现内部接口的幂等性,以及通过source和seq组合确保外部接口的唯一性。具体实践案例涉及抽奖系统和支付接口的防重复策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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这两个值,当第三方调用本系统接口时,先去数据库查询是否处理过,如果处理过,直接返回处理的结果,不进行后需的业务流程,如果没有处理,则进行后续的业务流程。

                                                                                                                    欢迎分享和指正,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值