1、在海量訂單產生的業務高峰期,如何避免消息的重復消費問題?
消費端實現冪等性: 即消費端永遠不會消費多次,即使收到了多條一樣的消息。
2、業界主流冪等性操作
唯一ID + 指紋碼機制,利用數據主鍵去重
利用Redis的原子性去實現
1) 唯一ID + 指紋碼機制
唯一ID + 指紋碼機制,利用數據主鍵去重
SELECT COUNT(1) FROM T_ORDER WHERE ID = 唯一ID + 指紋碼
好處: 實現簡單
壞處: 高並發下有數據庫寫入的性能瓶頸
解決方案: 跟進ID進行分庫分表進行算法路由
2) 利用Redis的原子性去實現
Redis要考慮的問題
第一:我們是否要進行數據落庫,如果落庫的話,關鍵解決的問題是數據庫和緩存如何做到原子性?
第二: 如果不進行落庫,那么都存儲到緩存中,如何設置定時同步的策略(緩存持久化)?