做 cache 的主要目的是提高資料存取的速度和效率。當程式需要頻繁地存取某些資料時,從記憶體或 cache 中獲取資料比從磁碟或遠端伺服器中取得資料要快得多。這樣可以減少對資源的重複訪問,提高系統的回應速度,並且減輕了伺服器或資料庫的負載。
1. Client 向 Application 發送請求 2. Application 先向 Redis 查詢資料 3. Redis Cache miss, 向 DB 查詢資料 4. Application 回傳資料給 client, 並存在 Redis 裡 (資料可能在 redis 也可能在 db, 怎麼能達到數據的一致性呢?) Client --1---> Application -----(效能瓶頸)--3--> Database (磁盤) | |--2---> Redis Cache (內存)
Application ---1. 嘗試從 cache 找 ------ 2. 若沒有找到則從 DB 找 ------> DB | | | | Cache <------- 3. 存進 cache ----------
Application ------- 1. 直接更新 DB 的資料 ------> DB | | Cache <------- 2. 刪除 在 cache 的舊資料(不更新) ----
Request A ---------- write A to 2 | DB: {A: 1} ------------{A: 2} ----- | delete key A Cache: {A: 1} --------------------- {} | Request B --------------------Read A and get 1
application 只需跟 cache 進行讀寫, 將同步 DB 的職責轉給 cache provider
application ----- 1. query data ---> redis ------ 2. get data ---> DB
4. return ----- <---- 3. set cache
Application ------ 1. write data ---> redis --- update data ----> db
跟 Write-Through Pattern 差不多,但更新並不會立刻到 DB,而是會稍後將 batch 的操作合併並更新 DB