T之家 5 月 14 日消息,科技媒體 Windows Report 近日發(fā)布博文,表示微軟應(yīng)用商店(Microsoft Store)近日出現(xiàn)“正在檢索信息”(Retrieving information)錯(cuò)誤,導(dǎo)致用戶無(wú)法下載任意內(nèi)容。
用戶反饋打開(kāi)微軟應(yīng)用商店并嘗試安裝應(yīng)用時(shí),頁(yè)面會(huì)跳出“正在從微軟應(yīng)用商店檢索信息”,而且會(huì)持續(xù)數(shù)小時(shí)時(shí)間。
用戶原本以為是電腦或者微軟賬號(hào)的問(wèn)題,不過(guò)重新注銷或者清除微軟應(yīng)用商店緩存,都無(wú)法解決這個(gè)問(wèn)題。
IT之家援引該媒體報(bào)道,這個(gè)問(wèn)題并非個(gè)例,在微軟官方支持論壇上有很多用戶反饋遇到了相同的問(wèn)題,Xbox、Prime Video、Bluemail 和 Windows File Recovery 等應(yīng)用都存在上述錯(cuò)誤。
存數(shù)據(jù)的簡(jiǎn)介、用例、策略和政策
您是否注意到,如果您的互聯(lián)網(wǎng)連接速度較慢并瀏覽網(wǎng)站,文本會(huì)先于任何高質(zhì)量圖像加載? 但是,在您隨后訪問(wèn)同一網(wǎng)站時(shí),您會(huì)發(fā)現(xiàn)頁(yè)面渲染速度很快。 當(dāng)您訪問(wèn)一個(gè)全新的網(wǎng)站時(shí),加載時(shí)間比 Facebook 或亞馬遜等經(jīng)常訪問(wèn)的網(wǎng)站要長(zhǎng)。 你知道為什么會(huì)發(fā)生這種情況嗎? 答案是緩存。
上圖是我的 Instagram 頁(yè)面在網(wǎng)速較慢時(shí)的樣子。 正如您所看到的,文本數(shù)據(jù)已顯示,但您看不到圖像,因?yàn)轫?yè)面仍在渲染。
為用戶提供最佳體驗(yàn)以提高保留率和參與度非常重要。 在當(dāng)今競(jìng)爭(zhēng)激烈的世界中,企業(yè)會(huì)因糟糕的用戶體驗(yàn)而受到影響。 想象一下,您正在任何視頻流網(wǎng)站上觀看您最喜歡的電視劇,但視頻一直在緩沖。 您會(huì)留下來(lái)并繼續(xù)在這樣的網(wǎng)站上訂閱嗎?
緩存的工作原理是“引用局部性”。 緩存充當(dāng)數(shù)據(jù)的本地存儲(chǔ)以加速查找或檢索。 緩存的主要目標(biāo)是減少讀取延遲并提高任何應(yīng)用程序的吞吐量。 讓我們?cè)谙乱还?jié)中看一下現(xiàn)實(shí)世界的類比。
假設(shè)你每天做飯。 您需要不同的食材、蔬菜、香料等來(lái)準(zhǔn)備食物。 但你每天都去超市買(mǎi)這個(gè)嗎? 那樣的話就太麻煩、太費(fèi)時(shí)間了。 因此,您首先檢查廚房或冰箱,以防雜貨堆積如山。 這樣就可以避免去超市的麻煩了。
在這里,您的冰箱就像一個(gè)儲(chǔ)藏室或當(dāng)?shù)氐氖卟松痰辍?使用緩存的最大好處是可以節(jié)省時(shí)間并且可以快速準(zhǔn)備食物。
后端應(yīng)用程序通常將數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫(kù)中。 當(dāng)客戶端獲取任何數(shù)據(jù)時(shí),應(yīng)用程序會(huì)查詢數(shù)據(jù)庫(kù),獲取數(shù)據(jù)并將其返回給用戶。 數(shù)據(jù)庫(kù)服務(wù)器作為單獨(dú)的進(jìn)程運(yùn)行,并且可以在與應(yīng)用程序服務(wù)器不同的計(jì)算機(jī)上運(yùn)行。
從數(shù)據(jù)庫(kù)讀取數(shù)據(jù)非常耗時(shí),因?yàn)樗枰W(wǎng)絡(luò)調(diào)用和IO操作才能從文件系統(tǒng)獲取數(shù)據(jù)。 如果數(shù)據(jù)存儲(chǔ)在Cache中,讀取操作將會(huì)非常快。 當(dāng)客戶端重復(fù)請(qǐng)求相同的數(shù)據(jù)時(shí),從緩存中獲取數(shù)據(jù)比從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)更有意義。
例如:如果一條推文變得病毒式傳播,所有客戶端都會(huì)嘗試獲取同一條推文的數(shù)據(jù)。 由于 Twitter 擁有數(shù)百萬(wàn)用戶,因此使用緩存將節(jié)省數(shù)百萬(wàn)次對(duì)數(shù)據(jù)庫(kù)的調(diào)用。
此外,緩存還可以減少數(shù)據(jù)庫(kù)的負(fù)載。 如果在Cache中找到數(shù)據(jù),就會(huì)節(jié)省數(shù)據(jù)庫(kù)調(diào)用,從而減少數(shù)據(jù)庫(kù)的壓力。 簡(jiǎn)單來(lái)說(shuō),你可以把Cache想象成一個(gè)存儲(chǔ)鍵值對(duì)的哈希表。
下圖展示了從Cache中讀取數(shù)據(jù)的過(guò)程:
緩存中可以存儲(chǔ)的數(shù)據(jù)量是有限制的。 清除緩存中應(yīng)用程序服務(wù)器不再需要的條目至關(guān)重要。
對(duì)于 Netflix,服務(wù)器會(huì)將最常觀看或熱門(mén)的節(jié)目緩存在緩存中。 它不需要存儲(chǔ)收視率隨著時(shí)間的推移而減少的節(jié)目。
例如:緩存像《金錢(qián)搶劫》這樣的電視節(jié)目(在撰寫(xiě)本文時(shí))比緩存像《奪寶奇兵》這樣的電影更有意義。
緩存可能會(huì)在某個(gè)時(shí)間點(diǎn)變滿,具體取決于應(yīng)用程序訪問(wèn)數(shù)據(jù)的方式。 因此,我們需要想出一種策略,將數(shù)據(jù)從緩存中刪除,并替換為將來(lái)更有可能被訪問(wèn)的數(shù)據(jù)。
緩存驅(qū)逐策略有多種,例如LRU(最近最少使用)、LFU(最近最少使用)、MRU(最近最少使用)。 這些策略使用預(yù)定義的邏輯從緩存中逐出數(shù)據(jù)。 我們將在下一節(jié)中討論上述每一點(diǎn)。
此策略從緩存中刪除最近最少使用的條目。 一旦緩存變滿,最近最少使用的條目就會(huì)被逐出,而最近的條目將被添加到其中。
您可以想象 Facebook 將名人的照片存儲(chǔ)在緩存中。 關(guān)注者的數(shù)據(jù)訪問(wèn)模式使得他們對(duì)最近的照片感興趣。 當(dāng)緩存已滿時(shí),它將踢出最近最少添加到其中的照片。
LFU 跟蹤數(shù)據(jù)項(xiàng)被訪問(wèn)的頻率或次數(shù)。 如果緩存大小超過(guò)給定閾值,它將逐出頻率最低的條目。
當(dāng)您在發(fā)短信時(shí)輸入任何單詞時(shí),手機(jī)會(huì)開(kāi)始建議您選擇多個(gè)單詞,而不是輸入整個(gè)單詞。 在內(nèi)部,您的手機(jī)軟件會(huì)保存您輸入的所有單詞及其頻率的緩存。
高速緩存稍后會(huì)逐出頻率最低的單詞。 如果多個(gè)單詞之間存在平局,則最近最少使用的單詞將被逐出。 在上面的手機(jī)示例中,如果您開(kāi)始使用“feature”、“features”、“feather”等詞語(yǔ),它將停止向您建議“feat”一詞(因?yàn)樵撛~將從緩存中清除)。
在 MRU 中,最近使用的條目將被刪除,并優(yōu)先考慮較舊的條目以保留在緩存中。 如果數(shù)據(jù)訪問(wèn)模式使得用戶不太可能查看最近的條目,則使用此策略進(jìn)行驅(qū)逐。 讓我們看一個(gè)例子。
Tinder 等約會(huì)應(yīng)用程序通常會(huì)緩存用戶的所有潛在匹配項(xiàng)。 當(dāng)用戶向左或向右滑動(dòng)個(gè)人資料時(shí),應(yīng)用程序不應(yīng)再次向用戶推薦相同的個(gè)人資料。 如果發(fā)生這種情況,將會(huì)導(dǎo)致用戶體驗(yàn)不佳。
有必要驅(qū)逐最近觀察到的條目。 應(yīng)用程序必須刪除向右或向左滑動(dòng)的配置文件的緩存條目。
顧名思義,數(shù)據(jù)首先寫(xiě)入Cache,然后再寫(xiě)入數(shù)據(jù)庫(kù)。 這樣就保證了Cache中的數(shù)據(jù)和數(shù)據(jù)庫(kù)中的數(shù)據(jù)的一致性。 緩存上完成的每次讀取都遵循最近的寫(xiě)入操作。
然而,這種方法的缺點(diǎn)是應(yīng)用程序?qū)懭胙舆t增加。 這種方法不適合寫(xiě)入量大的系統(tǒng)。 它對(duì)于在數(shù)據(jù)庫(kù)中持久保存數(shù)據(jù)后頻繁重新讀取數(shù)據(jù)的應(yīng)用程序非常有用。 寫(xiě)入延遲可能會(huì)受到影響,但可以通過(guò)較低的讀取延遲和一致性來(lái)補(bǔ)償。
從上面可以看出,通過(guò)緩存寫(xiě)入不適用于寫(xiě)入密集型系統(tǒng),因?yàn)檠舆t可能會(huì)增加。 另一種方法是先將數(shù)據(jù)寫(xiě)入緩存并將數(shù)據(jù)標(biāo)記為已修改(稍后在數(shù)據(jù)庫(kù)中更新)。
異步作業(yè)可以定期讀取緩存中所有修改的條目并更新數(shù)據(jù)庫(kù)中相應(yīng)的值。 這種方法既不會(huì)影響讀取延遲,也不會(huì)影響寫(xiě)入延遲。 唯一的缺點(diǎn)是由于緩存和數(shù)據(jù)庫(kù)之間的數(shù)據(jù)同步會(huì)存在延遲。 由于數(shù)據(jù)庫(kù)是事實(shí)來(lái)源,任何從數(shù)據(jù)庫(kù)讀取的應(yīng)用程序都會(huì)讀取過(guò)時(shí)的條目。
YouTube 等網(wǎng)站使用寫(xiě)回緩存來(lái)存儲(chǔ)任何視頻的觀看次數(shù)。 為病毒式視頻的每個(gè)觀看次數(shù)更新數(shù)據(jù)庫(kù)的成本高昂。 將數(shù)據(jù)寫(xiě)入緩存,然后同步到DB中是一個(gè)更好的解決方案。 使用回寫(xiě)式緩存可確保低讀/寫(xiě)延遲。
很少有后端應(yīng)用程序不經(jīng)常重新讀取最新數(shù)據(jù)。 在這種情況下,使用 Write around Cache。
在此策略中,更新數(shù)據(jù)庫(kù)而不寫(xiě)入緩存。 這不會(huì)向緩存加載不會(huì)被重新讀取的數(shù)據(jù)。 如果應(yīng)用程序開(kāi)始查詢最新數(shù)據(jù),則會(huì)導(dǎo)致緩存未命中。
以下是開(kāi)源內(nèi)存緩存產(chǎn)品列表
一篇文章介紹的是《瀏覽器緩存機(jī)制》,瀏覽器緩存是瀏覽器保存數(shù)據(jù)用于快速讀取或避免請(qǐng)求重復(fù)資源,提升網(wǎng)頁(yè)加載速度。緩存的數(shù)據(jù)到底放哪了呢?作為開(kāi)發(fā)者,有時(shí)也需要檢查一下緩存中的內(nèi)容。所以介紹下緩存方法以及緩存內(nèi)容在哪查找?
1、http 緩存
http緩存是存在于服務(wù)器與瀏覽器之間,是一種保存資源副本并在下次請(qǐng)求時(shí)直接使用該副本的技術(shù)。web緩存發(fā)現(xiàn)請(qǐng)求資源已經(jīng)被存儲(chǔ),它會(huì)攔截請(qǐng)求,返回資源副本,而不會(huì)去服務(wù)器重新請(qǐng)求資源。
具體的緩存設(shè)置,如何判斷是否有緩存?等,上一篇文章以詳細(xì)介紹,可點(diǎn)擊《瀏覽器緩存機(jī)制》查看。
打開(kāi)瀏覽器調(diào)試模式,在 Application 右側(cè)就會(huì)有瀏覽器的 8 種緩存方式,具體如下:
2、websql
websql是較新的chrome瀏覽器支持,并以獨(dú)立規(guī)范形式出現(xiàn),引入了一組使用 SQL 操作客戶端數(shù)據(jù)庫(kù)的 APIs。websql主要特點(diǎn):
websql常用的API如下:
openDatabase - 打開(kāi)已存在的數(shù)據(jù)庫(kù),如果不存在,則會(huì)新建一個(gè)新的數(shù)據(jù)庫(kù)。
transaction - 控制一個(gè)事物,以及這種情況執(zhí)行提交或者回滾。
executeSql - 執(zhí)行 SQL 語(yǔ)句。
3、indexDB
indexDB 是為了能夠在客戶端存儲(chǔ)客觀數(shù)量的結(jié)構(gòu)化數(shù)據(jù),并且在這些數(shù)據(jù)上使用索引進(jìn)行高性能的檢索。DOM存儲(chǔ)對(duì)于少量數(shù)據(jù)是非常友好的,但不適合存儲(chǔ)大量結(jié)構(gòu)化數(shù)據(jù),indexDB就是為了解決這個(gè)問(wèn)題而生的。
indexDB 分別為同步和異步訪問(wèn)提供了單獨(dú)的API,同步API本打算供Web Worker內(nèi)部使用,但目前還未實(shí)現(xiàn)。異步API在Web Worker內(nèi)部和外部都可以使用,另外瀏覽器對(duì)indexDB有50M大小限制。
indexDB主要特點(diǎn)有:
4、cookie
cookie指的就是會(huì)話跟蹤技術(shù)。一般指網(wǎng)站為了辨別用戶身份,進(jìn)行session跟蹤而而存儲(chǔ)在用戶本地終端上的數(shù)據(jù),cookie一般通過(guò)http請(qǐng)求頭發(fā)送到服務(wù)器。cookie主要特點(diǎn)有:
cookie常用操作:
setMaxAge - 設(shè)置cookie的有效期,時(shí)間單位是秒,負(fù)值時(shí)表示關(guān)閉瀏覽器后就失效,默認(rèn)值為-1。
setDomain - 用于指定,只有請(qǐng)求指定域名才會(huì)帶上該cookie。
setPath - 只有訪問(wèn)該域名下的cookieDemo的這個(gè)路徑地址才會(huì)帶cookie。
setValue - 重置 value 。
5、localstorage
localStorage 是HTML5的一種新的本地緩存方案,目前使用比較多,一般存儲(chǔ)ajax返回的數(shù)據(jù),存儲(chǔ)特點(diǎn)主要有:
localStroage常用API如下:
localStorage.setItem(key,value) // 保存數(shù)據(jù)
localStorage.getItem(key) // 獲取數(shù)據(jù)
localStorage.removeItem(key) // 刪除單個(gè)數(shù)據(jù)
localStorage.clear() // 刪除全部
6、sessionstorage
sessionStorage與上述localStroage類似,它的特點(diǎn)主要有:
sessionStorage常用API如下:
sessionStorage.setItem(key,value) // 保存數(shù)據(jù)
sessionStorage.getItem(key) // 獲取數(shù)據(jù)
sessionStorage.removeItem(key) // 刪除單個(gè)數(shù)據(jù)
sessionStorage.clear() // 刪除全部
7、application cache
application cache是離線緩存技術(shù),將大部分的圖片、js、css等資源放在mainfest文件配置中,頁(yè)面打開(kāi)時(shí)通過(guò)mainfest文件讀取本地文件或請(qǐng)求服務(wù)器資源。通常用于靜態(tài)頁(yè)面的緩存。
application cache特點(diǎn):
8、cacheStorage
cacheStorage 表示 cache對(duì)象的存儲(chǔ)。該接口提供 serviceWorker 或其他類型的工作線程或window范圍訪問(wèn)的所有命名緩存的主目錄。
CacheStorage常見(jiàn)方法:
9、flash緩存
flash緩存也是頁(yè)面通過(guò)js調(diào)用flash讀寫(xiě)特定的磁盤(pán)目錄,達(dá)到本地?cái)?shù)據(jù)緩存的目的。這是要基于flash的,所以基本不用。
*請(qǐng)認(rèn)真填寫(xiě)需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。