幂等性是什么?
我们可以借鉴数据库的乐观锁机制
比如我们执行一条更新库存的sql语句update user set count=count-1,version=version+1 where version=1
幂等性保障
在海量订单产生的业务高峰期间,如何避免消息的重复消费问题?
消费端实现幂等性,就意味着,我们的消息永远不会消费多次,即使我们收到多条一样的消息
业界主流的幂等性操作:
唯一ID+指纹码机制,利用数据库主键去重
select count(1)from user where id = 唯一id+指纹码
好处:实现简单
坏处:高并发下有数据库写入的性能瓶颈
解决方案:跟进ID进行分库分表进行算法路由
利用Redis的原子特性实现(一致性,单一性)
使用Redis进行幂等,需要考虑的问题
是否对数据进行落库,如果落库的话,关键解决的问题是数据库和缓存如何做到原子性?
如果不进行落库,都存储到缓存中。如何设置定时同步的策略?
解决方案:
双缓存模式,异步写入到缓存中,也可以写入到数据库中,
最终会有一个回调函数检查,这样能保障最终一致性,不能保证100%的实时性,
定是同步,比如databus同步