當系統達到一定流量時,一般都會通過增加緩存來提高系統性能。下面是最典型的緩存原理圖:

根據上圖實現的緩存機制,簡單而實用,而且程序也比較簡單,確實能大幅度提升系統性能。
但是當程序往數據庫里增加或者更新數據時,就要同時更新緩存,如下圖

當緩存很多,并且如果業務創建緩存的地方分散在各個功能,各個文件里時,很容易導致有些緩存忘記更新,從而導致一些業務上的錯誤,而這些錯誤很難通過測試來發現的。
在實際項目的實踐中,緩存的難度主要是在緩存的更新部分。舉個例子,假如一個簡單用戶表結構如下
```
CREATE TABLE `wp_user` (
`uid` int(11) NOT NULL AUTO_INCREMENT COMMENT '用戶ID',
`nickname` varchar(50) NULL COMMENT '用戶名',
`mobile` varchar(30) NULL DEFAULT NULL COMMENT '聯系電話',
`login_count` int(10) NULL DEFAULT 0 COMMENT '登錄次數',
`in_blacklist` tinyint(2) NULL DEFAULT 0 COMMENT '是否拉黑',
PRIMARY KEY (`uid`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 ROW_FORMAT = Compact;
```
系統通過用戶ID創建一個緩存,緩存的內容是ID對應這個用戶的所有信息,即有用戶名,電話,登錄次數,是否拉黑這些信息。
- 假如系統提供一個更新用戶信息的功能,能更新用戶名,聯系電話,那么用戶在提交數據更新到數據庫時,也要更新上面的緩存。
- 假如用戶每次登錄時都把登錄次數加1,那么更新完后也要更新上面的緩存。
- 假如管理員在后臺把這個用戶拉黑,也要更新上面的緩存。
我們看到上面三個功能都要更新同一個緩存,如果這三個功能都寫在一個文件里還好,否則后續要加新的更新操作時就很容易忘了更新。如果是幾個程序員協同開發那更是噩夢。
**有沒有一種方法,讓緩存不用關心這么多業務更新操作?**
有,我們可以通過以下方式實現

業務系統只需要直接更新數據庫即可,所有更新緩存的操作都由本終極解決方案自動完成。是不是很清爽,是不是很高大上!
**它通過減少更新數據庫后需要執行一堆更新緩存的業務代碼,實現系統代碼指數級精簡**