自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Redis混合存儲(chǔ)-冷熱數(shù)據(jù)識(shí)別與交換

存儲(chǔ) 存儲(chǔ)軟件 Redis
Redis混合存儲(chǔ)產(chǎn)品是阿里云自主研發(fā)的完全兼容Redis協(xié)議和特性的混合存儲(chǔ)產(chǎn)品。通過(guò)將部分冷數(shù)據(jù)存儲(chǔ)到磁盤(pán),在保證絕大部分訪問(wèn)性能不下降的基礎(chǔ)上,大大降低了用戶成本并突破了內(nèi)存對(duì)Redis單實(shí)例數(shù)據(jù)量的限制。

背景

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

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

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

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

[[236951]]

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

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

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

  • Key的訪問(wèn)頻度比Value要高很多。
  • 作為KV數(shù)據(jù)庫(kù),通常的訪問(wèn)請(qǐng)求都需要先查找Key確認(rèn)Key是否存在,而要確認(rèn)一個(gè)key不存在,就需要以某種形式檢查所有Key的集合。在內(nèi)存中保留所有Key,可以保證key的查找速度與純內(nèi)存版完全一致。
  • Key的大小占比很低。
  • 即使是普通字符串類型,通常的業(yè)務(wù)模型里面Value比Key要大幾倍。而對(duì)于Set,List,Hash等集合對(duì)象,所有成員加起來(lái)組成的Value更是比Key大了好幾個(gè)數(shù)量級(jí)。

因此,Redis混合存儲(chǔ)實(shí)例的適用場(chǎng)景主要有以下兩種:

  • 數(shù)據(jù)訪問(wèn)不均勻,存在熱點(diǎn)數(shù)據(jù);
  • 內(nèi)存不足以放下所有數(shù)據(jù),且Value較大(相對(duì)于Key而言)

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

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

偽代碼如下:

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

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

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

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

Redis混合存儲(chǔ)在冷熱數(shù)據(jù)交換過(guò)程在后臺(tái)IO線程中完成。

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

異步方式:

  1. 主線程在內(nèi)存接近***值時(shí),生成一系列數(shù)據(jù)換出任務(wù);
  2. 后臺(tái)線程執(zhí)行這些數(shù)據(jù)換出任務(wù),執(zhí)行完畢之后通知主線程;
  3. 主線程更新釋放內(nèi)存中的value,更新內(nèi)存中數(shù)據(jù)字典中的value為一個(gè)簡(jiǎn)單的元信息;
  4. 同步方式:

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

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

異步方式:

  1. 主線程在執(zhí)行命令前,先判斷命令涉及的value是否都在內(nèi)存中;
  2. 如果不是,生成數(shù)據(jù)加載任務(wù),掛起該客戶端,主線程繼續(xù)處理其他客戶端請(qǐng)求;
  3. 后臺(tái)線程執(zhí)行數(shù)據(jù)加載任務(wù),執(zhí)行完畢后通知主線程;
  4. 主線程在內(nèi)存中更新數(shù)據(jù)字典中的value,喚醒之前掛起的客戶端,處理其請(qǐng)求。
  5. 同步方式:

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

 

責(zé)任編輯:武曉燕 來(lái)源: Spark學(xué)習(xí)技巧
相關(guān)推薦

2022-07-04 15:03:24

財(cái)經(jīng)支付數(shù)據(jù)庫(kù)存儲(chǔ)

2023-01-12 15:25:51

Curve數(shù)據(jù)存儲(chǔ)

2017-11-02 10:23:48

冷熱分層存儲(chǔ)

2023-08-11 09:00:00

2023-11-28 07:29:17

2022-03-03 09:51:11

RedisCouchbase數(shù)據(jù)存儲(chǔ)

2024-01-15 16:51:03

Redis數(shù)據(jù)存儲(chǔ)

2017-03-08 14:36:17

全閃存混合存儲(chǔ)

2017-03-13 19:46:08

閃存存儲(chǔ)SSD

2018-01-14 16:11:56

混合存儲(chǔ)陣列數(shù)據(jù)遷移

2023-11-20 08:44:18

數(shù)據(jù)序列化反序列化

2017-11-29 08:38:58

存儲(chǔ)陣列

2017-10-17 10:34:16

數(shù)據(jù)中心混合存儲(chǔ)

2016-06-07 16:43:57

云計(jì)算混合云

2018-04-27 09:03:57

Redis數(shù)據(jù)存儲(chǔ)

2018-01-15 08:47:42

戴爾EMC云存儲(chǔ)混合云

2024-03-26 00:03:08

Redis數(shù)據(jù)RDB

2024-12-11 08:41:18

2015-11-05 16:08:18

數(shù)據(jù)中心節(jié)能降溫
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)