真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Redis冷熱數(shù)據(jù)識別與交換怎么實現(xiàn)

本文小編為大家詳細介紹“redis冷熱數(shù)據(jù)識別與交換怎么實現(xiàn)”,內(nèi)容詳細,步驟清晰,細節(jié)處理妥當(dāng),希望這篇“Redis冷熱數(shù)據(jù)識別與交換怎么實現(xiàn)”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識吧。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:域名與空間、網(wǎng)站空間、營銷軟件、網(wǎng)站建設(shè)、昭化網(wǎng)站維護、網(wǎng)站推廣。

背景

Redis混合存儲產(chǎn)品是阿里云自主研發(fā)的完全兼容Redis協(xié)議和特性的混合存儲產(chǎn)品。

通過將部分冷數(shù)據(jù)存儲到磁盤,在保證絕大部分訪問性能不下降的基礎(chǔ)上,大大降低了用戶成本并突破了內(nèi)存對Redis單實例數(shù)據(jù)量的限制。

其中,對冷熱數(shù)據(jù)的識別和交換是混合存儲產(chǎn)品性能的關(guān)鍵因素。

冷熱數(shù)據(jù)定義

在Redis混合存儲中,內(nèi)存和磁盤的比例是用戶可以自由選擇的:

Redis冷熱數(shù)據(jù)識別與交換怎么實現(xiàn)

Redis混合存儲實例將所有的Key都認為是熱數(shù)據(jù),以少量的內(nèi)存為代價保證所有Key的訪問請求的性能是高效且一致的。而對于Value部分,在內(nèi)存不足的情況下,實例本身會根據(jù)最近訪問時間,訪問頻度,Value大小等維度選取出部分value作為冷數(shù)據(jù)后臺異步存儲到磁盤上直到內(nèi)存小于制定閾值為止。

在Redis混合存儲實例中,我們將所有的Key都認為是熱數(shù)據(jù)保存在內(nèi)存中是出于以下兩點考慮:

  1. Key的訪問頻度比Value要高很多。

  2. 作為KV數(shù)據(jù)庫,通常的訪問請求都需要先查找Key確認Key是否存在,而要確認一個key不存在,就需要以某種形式檢查所有Key的集合。在內(nèi)存中保留所有Key,可以保證key的查找速度與純內(nèi)存版完全一致。

  3. Key的大小占比很低。

  4. 即使是普通字符串類型,通常的業(yè)務(wù)模型里面Value比Key要大幾倍。而對于Set,List,Hash等集合對象,所有成員加起來組成的Value更是比Key大了好幾個數(shù)量級。

因此,Redis混合存儲實例的適用場景主要有以下兩種:

  1. 數(shù)據(jù)訪問不均勻,存在熱點數(shù)據(jù);

  2. 內(nèi)存不足以放下所有數(shù)據(jù),且Value較大(相對于Key而言)

冷熱數(shù)據(jù)識別

當(dāng)內(nèi)存不足時的情況下,實例會按照最近訪問時間,訪問頻度,value大小等維度計算出value的權(quán)重,將權(quán)重最低的value存儲到磁盤上并從內(nèi)存中刪除。

偽代碼如下:

Redis冷熱數(shù)據(jù)識別與交換怎么實現(xiàn)

理想的情況下,我們當(dāng)然希望能夠準(zhǔn)確的計算出當(dāng)前最冷的value。然而,value的冷熱程度根據(jù)訪問情況動態(tài)變化的,每次都重新計算所有value的冷熱權(quán)重的時間消耗是完全不可接受的。

Redis本身在內(nèi)存滿的情況下會根據(jù)用戶設(shè)置的淘汰策略淘汰數(shù)據(jù),而熱數(shù)據(jù)從內(nèi)存寫到磁盤也可以認為是一種“淘汰”的過程。從性能,準(zhǔn)確率以及用戶理解程度考慮,我們在冷熱數(shù)據(jù)識別時采用和Redis類似的近似計算方法,支持多種策略, 通過隨機采樣小部分數(shù)據(jù)來降低CPU和內(nèi)存消耗,通過eviction pool利用采樣歷史信息來輔助提高準(zhǔn)確率。

上圖為不同版本和不同采樣樣本數(shù)目配置下,Redis近似淘汰算法的命中率示意圖。淺灰色的點為被淘汰數(shù)據(jù),灰色的點為未淘汰數(shù)據(jù),綠色點為測試過程中新加入的數(shù)據(jù)。

冷熱數(shù)據(jù)交換

Redis混合存儲在冷熱數(shù)據(jù)交換過程在后臺IO線程中完成。

熱數(shù)據(jù)->冷數(shù)據(jù)

異步方式:

  1. 主線程在內(nèi)存接近最大值時,生成一系列數(shù)據(jù)換出任務(wù);

  2. 后臺線程執(zhí)行這些數(shù)據(jù)換出任務(wù),執(zhí)行完畢之后通知主線程;

  3. 主線程更新釋放內(nèi)存中的value,更新內(nèi)存中數(shù)據(jù)字典中的value為一個簡單的元信息;

  4. 同步方式:

如果寫入流量過大,異步方式來不及換出數(shù)據(jù),導(dǎo)致內(nèi)存超出最大規(guī)格內(nèi)存。主線程將直接執(zhí)行數(shù)據(jù)換出任務(wù),達到變相限流的目的。

冷數(shù)據(jù)->熱數(shù)據(jù)

異步方式:

  1. 主線程在執(zhí)行命令前,先判斷命令涉及的value是否都在內(nèi)存中;

  2. 如果不是,生成數(shù)據(jù)加載任務(wù),掛起該客戶端,主線程繼續(xù)處理其他客戶端請求;

  3. 后臺線程執(zhí)行數(shù)據(jù)加載任務(wù),執(zhí)行完畢后通知主線程;

  4. 主線程在內(nèi)存中更新數(shù)據(jù)字典中的value,喚醒之前掛起的客戶端,處理其請求。

  5. 同步方式:

在Lua腳本,具體命令執(zhí)行階段,如果發(fā)現(xiàn)有value存儲在磁盤上,主線程將直接執(zhí)行數(shù)據(jù)加載任務(wù),保證Lua腳本和命令的語義不變。

讀到這里,這篇“Redis冷熱數(shù)據(jù)識別與交換怎么實現(xiàn)”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領(lǐng)會,如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


本文標(biāo)題:Redis冷熱數(shù)據(jù)識別與交換怎么實現(xiàn)
新聞來源:http://weahome.cn/article/pjojsc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部