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