Redis怎么保证接口幂等性和消息不被重复消费

结合网上下单实例说明如何保证接口幂等性

结合具体的实例来看一下,我们平常用的比较多的就是网上下单。

我们在下单的过程中需要把商品添加到购物车,添加购物车之后然后后再提交订单。我们在提交订单这个动作,需要去保证接口幂等的。

这个的接口幂等是如何保证的呢,具体可以看下面图:
在这里插入图片描述
第一步,客户端首先需要添加商品到购物车,我们可以把它称作一个预览请求。预览请求的话就会返回一些购物车的一些试算的一些结果。比如说它的一些总价。

这时候客户端添加商品到购物车,购物车在服务端进行一些逻辑试算。这时候,我们需要去生成一个version保存在Redis中。同时我们需要将这个version字段返回给客户端

为什么需要将生成的version字段返回给客户端

因为客户端在第二步去提交订单的时候,需要将这个version值带给服务端看。这客服端去提交订单携带version到服务端。服务端要基于这个version字段去做一个分布式锁处理

为什么要去做分布式锁

因为如果说客户端携带version请求的有很多个,都到了服务端。如果没加分布式锁的话,会有并发问题

到了服务端,我们首先去判断version字段是否存在,如果version字段存在,才会继续走后面的逻辑处理。处理完之后再把version字段删除掉。如果服务端去判断version字段不存在,那这个请求就直接返回。这样就可以保证接口的一个幂等性。

如何保证消息不被重复消费

首先生产者会将消息发给消费者,消费者需要去基于生产者里面的消息的唯一属性,去做一些分布式锁的处理。
在这里插入图片描述

为什么需要去做分布式锁处理

其实跟上面的类似,就是说避免同时有生产者相同的消息多条到消费者。这时候我们需要去判断version是否存在。这个version可以是自定义的。如果说version字段不存在,我们就可以去生成一个唯一的version,保存在redis中。

如果现在生产者又来了一条相同的消息到了消费者,现在我们去判断version字段是否存在。如果已经存在的话,那么就可以就不处理这个消息,这样就可以保证消息不被重复消费。

参考资料redis怎么做幂等?

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值