https://whimsical.com/redis-JgswfDF9K9PjqKHZJRRFzn
⚙️ 說明
使用到三種 redis data type
waiting:store:{store_id}:capacity:{capacity}
- 保存特定分店特定桌型的候位佇列,2003是下一組,2008是最後一組,總共有6組正在候位。實際儲存的是
reservation_id
- Data Type: Linked List
- 執行叫號後,2003被移除,然後下一個結構
called:store:{store_id}:capacity:{capacity}
由2002改設為2003
- 新增候位客人,塞到2008後面
- 如果為了支援隨意叫號,可以改用 Sorted Set 實作,當前假設都是循序叫號。
- 不是只保存頭跟尾而使用 Linked List 是為了簡化資料的管理並增加彈性,如果號碼絕對連號,可以簡化成只存頭尾。
- 以每間店有3種桌型,共5間分店來計算,系統中共有15個這樣的 List
called:store:{store_id}:capacity:{capacity}
- 保存特定分店特定桌型當前叫到的號碼,實際儲存的是
reservation_id
- Data Type: Strings
- 個數跟前一個例子一樣
pending:{pending_token}
- 保存已經遠端輸入手機號碼,等待 PIN code 驗證的特定客人
- Data Type: Hash Table
- 該 key 使用 TTL 設定 lifespan 為 10分鐘 (從 config 之類設定),自動過期消失
- 整個系統有多少等待中的客人,就有多少個這樣的 Hash Table
⚙️ Pseudo Code
- 取得2號店,1~2人桌
總候位人數
, 當前叫號
, 我前面的候位組數
- 驗證簡訊以完成取號操作