一、什么是幂等性
可以参考数据库乐观锁机制,比如执行一条更新库存的 SQL 语句,在并发场景,
为了性能和数据可靠性,会在更新时加上查询时的版本,并且更新这个版本信
息。可能你要对一个事情进行操作,这个操作可能会执行成百上千次,但是操作
结果都是相同的,这就是幂等性。
比如,我们执行一条更新库存的sql语句:update table set count = count -1 where id = 1
在高并发的场景下,就拿秒杀系统来做说明,现在商品就剩下一个了。如果我们
执行:update table set count = count -1 where id = 1这个sql语句的时候,高并发
情况会导致库存成为负数,这种操作是有问题的。现在用乐观锁:在查询的时
候,假设查询的版本号是1,在更新的时候拿着版本号作为更新条件即where
version=1来更新。高并发时候,第一个执行完成后,version+1了。当第二条更新
,发现已经不是1了就更新不了。
二 幂等性保障
在海量订单产生的业务高峰期间,如何避免消息的重复消费问题?
消费端实现幂等性,就意味着,我们的消息永远不会消费多次,即使我们收
到多条一样的消息
三 业界主流的幂等性操作
唯一ID+指纹码机制,利用数据库主键去重
名称解释