幂等性

幂等性:可能你对一件事情进行操作,这个操作可能要执行多次,那么最终操作的结果都是相同的。好像执行一条sql语句,执行多次之后结果都是一致的。

我们可以借鉴数据库的乐观锁的机制:比如我们要执行更新一条库存的sql语句

update T_REPS set count = count-1,verson = verson +1 where verson = 1

就是一开始读取时候,先读取version,写入操作之前先判断version的值 才进行更新 保证不重复执行

 

消费端--幂等性保证

在海量订单产生的业务高峰期,如何避免消息的重复消费问题

消费端实现幂等性,就意味着,我们消息永远不会被多次消费,即使我们·收到多条一样的消息。

虽然代码可能跑多次,但是写入数据 消费的信息只有一次。

 

  1. 唯一id+指纹码机制 利用数据库主键去重

  2. 利用redis的原子性去实现

指纹码机制一般都是根据业务规则+时间戳拼接实现的,一般不会随机生成的,要保证唯一性,用户可能在一个时间段中多次提交支付请求

,然后就是根据指纹码机制判定。缺点就是 会有数据库瓶颈压力 可以通过哈希算法实现路由,将单个数据库的幂等性转换为多数据幂等性。

第一个问题:如果消息进行入库处理的话,需要考虑的问题就是如何保证数据库和缓存做到原子性,保证数据库和缓存原子性。

你可能会想到加事务,但是两个数据源不能加事务啊,所以可能会出现  数据库写入成功 但是缓存没有写入成功  缓存写入成功但是数据库没有写入成功。

假设数据没有写入成功 缓存写入成功了    第二次相同的消息过来 是否过滤还是写入数据库中

第二个问题就是:如何设置定时同步策略问题。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值