app快取策略探索

2021-09-13 23:14:35 字數 1534 閱讀 2442

最開始的時候只是希望減輕伺服器壓力,減少不必要的計算過程。比如使用者資料沒變化的時候就不需要去計算使用者的各種資料,直接使用快取就好了。

這裡將伺服器的介面返回資料根據策略快取在redis中,然後根據上次更新之後的時間戳來判斷是否需要重新計算快取中的資料。

有人可能開始質疑。這個資料本來就是放在快取中的,尤其是使用者資料,根本不可能實時去計算。這裡稍微說一下這個方案的背景。

後端計算和更新的資料其實已經存在在redis中了,但是在業務比較複雜的情況下,有些資料其實還是需要去獲取的。這裡的快取其實類似於乙個http的快取。它的本意只是為了快取最終介面需要返回的資料。這裡使用redis去儲存本來只是乙個過度方案。打算使用這個方案的同學可以去關注一下varnish,這個才是真正的http快取。

這個階段其實才開始算真正的快取。

這樣有很多好處:

減少不必要的計算

關鍵時刻可以立馬更新介面資料,甚至可以灰度更新某些地區的、ip的使用者快取

不返回大塊的資料,加速了請求速度

將介面返回的資料看過一段固定的字串,每次都計算字串的hash值。這樣可以更加方便的判斷介面返回資料是否需要更新。

在上一步的策略中,介面返回的資料根據時間戳其實是根據介面更新的時間來定的。加入介面更新了,但是資料並沒有變化,這個時候就會產生一次額外的請求。使用者多的時候也是乙個非常流量的操作。

如果使用hash來判斷介面是否需要更新,這樣就可以直接免去了這種無用的更新操作。相比上乙個版本更加的高效。不過服務端計算hash讓整個專案的複雜度又高了不少。這個就要考慮這樣做是否值得了。

如果原有的更新策略已經完成了。比如重新整理redis的策略已經做完了。其實這個時候將redis中的資料做一次hash也不費事,這樣也可以非常簡單的將快取策略公升級。

這裡再提出乙個更加激進的策略。假如某些介面的更新速度非常慢,我叫這些介面靜態介面。那麼每次的304請求是不是非常多餘?

這裡就將這種介面設定乙個固定的過期時間。在這個過期時間內,每次請求介面都會使用本地快取,直到過期之後採取請求遠端介面。

有人提出說,這種策略在後端有更新的時候不能即時的更新資料。別著急,更新資料也可以非常及時。

在所有介面之後,在新增乙個本地快取策略介面。將上述幾個介面的狀態放在這裡。每次都請求後端介面,讓後端來判斷這個介面是否需要更新。比如:請求hash,如果需要更新就返回最新狀態,不需要更新就不返回資料。

其他的靜態介面在請求之前都會使用這個狀態比較一次。如果需要更新就發請求,不需要更新就使用本地快取。這樣就完美的解決了介面快取的問題。從乙個每次都要請求介面變成了部分介面快速返回304,部分介面不請求。

通過上述幾個策略就可以減少非常多的無用請求。比如後端的熱配置資訊,很多時候其實沒有改動,完全可以使用靜態介面的策略。

App隱私策略

一 本公司如何收集您的個人資訊 個人資訊是可用於唯一地識別或聯絡某人的資料。二 本公司如何使用您的個人資訊 2 通過您的個人資訊實現密碼找回功能。如果不存在清忽略 3 除本公司發生重組 合併或 可將我們收集的一切個人資訊轉讓給相關第三方外,本公司不會向任何無關第三方提供 出租 分享或交易您的個人資訊...

GoogleEarth快取機制探索

windows7下的路徑是?google earth是用qt寫的!2.自定義google earth 谷歌地球 快取檔案和kml檔案 地標 的儲存位置 google earth預設安裝到c分割槽,使用者無法設定安裝路徑,這樣會帶來兩個問題,一是隨著使用次數和瀏覽量增加,快取檔案不斷增大,會占用很多的...

HTTP 快取策略

瀏覽器一般快取 css js等靜態檔案,因為這些檔案的更新頻率相對來說比較低,合理利用瀏覽器的快取對 的效能提公升有很大幫助。http快取分為兩部分,分別是本地快取和快取協商,當本地快取不生效時會啟用快取協商。http快取主要由http協議的頭 header 資訊來制定。本地快取 本地快取是指瀏覽器...