我們要改一個設定,走的是最短的路:直接寫資料庫。

寫入成功,查出來是新值。而應用程式讀到的還是舊值。

徵狀會指向錯的地方

那個設定控制的是啟用哪一套樣式。讀到舊值的結果,是新的那一套完全沒有被載入 —— 沒有樣式、沒有函式、前台整個回到預設的樣子。

這跟「新的那一套有錯,系統自動退回預設」長得一模一樣。 我們往那個方向查了一陣子:檢查語法、檢查必要檔案、檢查宣告格式。全部正常。

判準

問系統兩件事:那一套有沒有錯誤?系統列不列得出它?

如果錯誤是空的、而且列得出來,那它就不是壞的。問題不在兩端,在中間 —— 有東西站在你和資料庫之間。

常駐物件快取就是那個東西。應用程式讀設定時先問快取,快取有值就不去資料庫了。

兩條紀律

① 繞過應用層寫入之後,一定要清快取。

② 清完要另開一個行程再驗。 同一個行程裡,樣式與函式早在清快取之前就載入完了 —— 當場檢查還是空的,你會以為清了也沒用。我們也踩了這一步。

更大的那一課

走捷徑本身不是錯。錯的是走捷徑的時候,忘記自己繞過了什麼。

每一層快取都是一份副本,而每一份副本都是一個會說謊的機會。