通過監控資料庫變化實現自動更新快取的終極解決方案

2021-09-25 02:29:27 字數 1301 閱讀 2260

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

根據上圖實現的快取機制,簡單而實用,而且程式也比較簡單,確實能大幅度提公升系統效能。

但是當程式往資料庫裡增加或者更新資料時,就要同時更新快取,如下圖

當快取很多,並且如果業務建立快取的地方分散在各個功能,各個檔案裡時,很容易導致有些快取忘記更新,從而導致一些業務上的錯誤,而這些錯誤很難通過測試來發現的。

在實際專案的實踐中,快取的難度主要是在快取的更新部分。舉個例子,假如乙個簡單使用者表結構如下

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對應這個使用者的所有資訊,即有使用者名稱,**,登入次數,是否拉黑這些資訊。

我們看到上面三個功能都要更新同乙個快取,如果這三個功能都寫在乙個檔案裡還好,否則後續要加新的更新操作時就很容易忘了更新。如果是幾個程式設計師協同開發那更是噩夢。

有沒有一種方法,讓快取不用關心這麼多業務更新操作?

有,我們可以通過以下方式實現

業務系統只需要直接更新資料庫即可,所有更新快取的操作都由本終極解決方案自動完成。是不是很清爽,是不是很高大上!

它通過減少更新資料庫後需要執行一堆更新快取的業務**,實現系統**指數級精簡

IP資料庫的自動更新

我們這裡介紹幾個免費ip資料庫的更新,對於國外ip資料,我們使用maxmind的開源專案geoip,而國內ip資料我們使用純真的qqwry,由於qqwry是rara格式的,我們首先在系統安裝unrar wget gzip d unrar 3.7.7 centos.gz mv unrar 3.7.7 ...

資料庫自動更新的實現 php專案(1)

實習的時候做乙個php的專案,專案中使用了mysql資料庫,由於專案規模和需求的變更,經常需要對資料庫的設計進行更新,有的時候需要加一些字段,有的時候需要加一些表,每次在不同的開發人員的電腦上和在伺服器上部署專案的時候,都要手動更新資料庫,這樣比較麻煩,也比較容易出錯,很難保證這麼多主機上所有的資料...

通過RSS實現app的自動更新

其實這個想法早在十年前我還在做桌面應用的時候就想過了,而且還在乙個delphi程式裡嘗試了一下,但是因為後來沒再做桌面應用,這事也就放下了。最近在做移動應用,又開始覺得需要這樣乙個功能。本來這種事情交給google play處理就好了,但是因為國內的奇葩環境,完全依賴google play並不現實,...