Shopify 工程師將庫存預留系統從 Redis 遷移至 MySQL,並透過實施行數有界池(bounded pool of rows)機制來維持效能。在該設計中,每個可銷售單位由單獨的行表示,且每個商品與地點組合的行數上限設定為 1,000 行。
這項架構轉變消除了獨立 Redis 叢集的營運成本,同時維持了系統的可擴展性與原子性。該解決方案利用 MySQL 的 SKIP LOCKED 功能,避免了傳統行鎖定帶來的競爭瓶頸;透過限制活躍預留池的行數,系統成功防止了因掃描大量資料而導致的查詢效能下降。
此舉挑戰了業界認為 Redis 對高併發庫存系統不可或缺的常規,證明現代關聯式資料庫在確保 ACID 交易資料完整性的同時,能處理與 Redis 相當的預留吞吐量。這為優先考慮一致性而非微秒級延遲的系統提供了替代方案,並有望簡化基礎設施架構。
事件背景
Redis 傳統上因其對簡單資料結構的高效能和原子操作而被用於庫存預留,但它通常需要單獨的叢集且缺乏多地點感知能力。MySQL 作為關聯式資料庫,透過 ACID 屬性(原子性、一致性、隔離性、持久性)確保資料完整性,但過去在高併發鎖定方面面臨挑戰。「有界池」方法限制了參與併發更新的行數,在維持關聯式資料庫一致性優勢的同時優化了效能。
社群觀察
社群反應兩極,部分用戶讚賞其技術見解,另一些用戶則批評文章寫作風格可能由 AI 生成。討論中突出了對該方法是否比現有解決方案更簡單的懷疑,有人指出選擇 MySQL 可能是基於既有基礎設施而非在技術上優於 Redis。



