Skip to content
Miliya's Expedition
Go back

什麼是 Cache?

一般正常情況下,客戶端向系統請求資料的流程會長這樣子

客戶端 → Web Server → 系統 → 資料庫 → 系統 → Web Server → 客戶端
  1. nginx確保客戶端的需求與資料能正確且安全的傳遞給系統伺服器
  2. 系統收到請求後,經過程式邏輯確認 要完成這個請求需要的資料有哪些,向資料庫發送query
  3. 資料庫收到query並執行,把檢索結果傳給系統
  4. 系統收到資料會把他們整理/運算/組合 成Web Server接收的形式,在傳給Web Server
  5. Web Server收到資料傳給客戶端瀏覽器渲染出來

想像一下,如果第4步驟中有高達300~500多行程式碼都再處理 整理/運算/組合,這些複雜的程式邏輯每次客戶端請求都要在run過一遍,結果不是客戶端等到天荒地老海枯石爛,就是系統直接罷工不錄了。

所以Cache的核心價值就出來了! 當客戶端第一次請求需要經過複雜程式邏輯才能跑出來的資料時,系統會如實地run過一遍上述的流程,然後在傳給Web Server之前把結果存在Cache中,並把這份暫存資料告訴Web Server,等到下次客戶端再次請求同樣的資料時,系統直接從Cache中拿給Web Server,直接省略和資料庫交流與複雜的程式邏輯運算。

客戶端 → Web Server → 系統 →|檢查Cache中是否有資料| 沒有 → 資料庫 → 系統 → Web Server → 客戶端
                          →|檢查Cache中是否有資料| 有   → Cache  → Web Server → 客戶端

Cache的使用時機

實際應用

當客戶端想要讀取某位使用者當下的進度狀態資料,如進行中、通過、未通過、進度%數等等,而這些進度狀態的判別需要從資料庫中select 多個沒有直接關聯的table進行資料的交叉比對、運算處理後才能判斷狀態,在此情況下若未使用Cache,客戶端每查看一個人的進度,則系統就要運算一次,會造成使用者體驗大幅下降,對系統產生不信任感,更別提客戶端想要同時查看多位使用者的進度了。

同場加映


Share this post on:

Previous Post
什麼是 Nginx?
Next Post
堆疊Stack