日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
功能重塑Redis中Resize功能的好處(redis的resize)

功能重塑:Redis中RESIZE功能的好處

我們提供的服務(wù)有:成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、云夢ssl等。為上千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學管理、有技術(shù)的云夢網(wǎng)站制作公司

Redis是一款高性能的內(nèi)存數(shù)據(jù)庫,其內(nèi)置了多種數(shù)據(jù)結(jié)構(gòu),支持豐富的操作功能,如緩存、消息隊列、集合、哈希表等等。然而,即使是優(yōu)秀的數(shù)據(jù)庫也難免存在功能不完善的地方。Resize功能就是Redis中需要完善的一項功能。本文將重點介紹Redis中Resize功能的好處以及如何實現(xiàn)。

Redis中的Resize功能是指縮小內(nèi)存管理區(qū)域的功能。在Redis中,每一種數(shù)據(jù)結(jié)構(gòu)都有對應(yīng)的內(nèi)存管理區(qū)域,每當Redis中的某個數(shù)據(jù)結(jié)構(gòu)被刪除或者其占用的內(nèi)存變得過小時,這個內(nèi)存管理區(qū)域并不會減小,從而導(dǎo)致內(nèi)存空間浪費。而Resize功能的目的就是在Redis內(nèi)存管理區(qū)域過大時,可以自動縮小內(nèi)存管理區(qū)域的大小。這樣就能夠更加高效地利用Redis的內(nèi)存資源,降低內(nèi)存的浪費。

實現(xiàn)Redis中的Resize功能需要提前了解Redis中的內(nèi)存管理機制。Redis中使用RedisObject作為對象的抽象,它根據(jù)實際情況分為5中類型:字符串類型、哈希類型、列表類型、集合類型和有序集合類型,每一種類型的RedisObject都有相應(yīng)的內(nèi)存管理機制。在Redis中,每個RedisObject都有一個對應(yīng)的sds或struct實例,用于存儲對應(yīng)的數(shù)據(jù)。但是,當RedisObject被刪除或者數(shù)據(jù)的長度變得很短時,內(nèi)部的sds或struct實例并不會被釋放,這就造成了內(nèi)存的浪費。而Resize功能的實現(xiàn)就是通過釋放這些不必要的內(nèi)存來達到優(yōu)化內(nèi)存使用的目的。

具體實現(xiàn)Resize的方式有幾種,下面以哈希類型為例進行說明。哈希類型中每個鍵值對都對應(yīng)一個RedisObject對象,在刪除哈希類型中某個鍵值對時,可以通過判斷已經(jīng)刪掉的對象的大小和已用的內(nèi)存量來判斷是否觸發(fā)Resize功能。在RedisObject內(nèi)部,可以引入一個函數(shù)用于自動釋放無用的內(nèi)存空間,一般會將這個函數(shù)放在_free系列函數(shù)中。當哈希類型中有鍵值對被刪除時,這個_free函數(shù)就會被觸發(fā),從而達到釋放無用內(nèi)存的目的。

Resize功能的實現(xiàn)不僅能夠降低Redis內(nèi)存的浪費,同時也能夠提高Redis的性能。由于釋放內(nèi)存時需要遍歷哈希表或者其他數(shù)據(jù)結(jié)構(gòu),所以在實際運行時會稍微增加一些CPU的負載。但是,由于Redis采用的是單線程模型,所以沒有鎖的問題,而且Redis內(nèi)部的哈希表遍歷方式確保了數(shù)據(jù)結(jié)構(gòu)中對象的順序,從而使得實現(xiàn)Resize功能的代價很小,幾乎可以忽略不計。

Resize功能的實現(xiàn)能夠更加高效地利用Redis的內(nèi)存資源,降低內(nèi)存的浪費。同時也能夠提高Redis的性能,從而更好地支持大規(guī)模的數(shù)據(jù)存儲和處理。 在實際應(yīng)用中,我們需要根據(jù)實際情況評估內(nèi)存的使用情況,合理設(shè)置Resize功能的閾值,以達到最佳的性能表現(xiàn)。

參考代碼:

以下是Redis中哈希類型刪除鍵值對時,判斷是否需要釋放內(nèi)存的代碼片段:

hdelCommand(redisClient *c){

……

if (deleted) {

if (HT_DELETED_NODE_VAL(rules,NULL)) { // 判斷是否需要 Resize

dictEnableResize(h->ht); // 啟動Resize

}

notifyKeyspaceEvent(NOTIFY_HASH,”hdel”,c->argv[1],c->db->id);

server.dirty++;

}

……

}

以下是Redis中哈希表使用Resize的代碼片段:

/* Perform a resize if needed (dict_can_resize is true) */

void dictResize(dict *d)

{

int64_t minimal;

/* Don’t start a resize if the dictionary is already rehashing, if

* the ratio between keys and buckets is less than specified,

* or if we are in the middle of a bgrewrite save. */

if (dictIsRehashing(d) || dict_force_resize_ratio == 0 ||

d->ht[0].used

minimal = d->ht[0].used*100/dict_force_resize_ratio;

if (minimal

_dictResize(d,minimal);

}

注:代碼僅供參考。

成都創(chuàng)新互聯(lián)科技有限公司,是一家專注于互聯(lián)網(wǎng)、IDC服務(wù)、應(yīng)用軟件開發(fā)、網(wǎng)站建設(shè)推廣的公司,為客戶提供互聯(lián)網(wǎng)基礎(chǔ)服務(wù)!
創(chuàng)新互聯(lián)(www.cdcxhl.com)提供簡單好用,價格厚道的香港/美國云服務(wù)器和獨立服務(wù)器。創(chuàng)新互聯(lián)成都老牌IDC服務(wù)商,專注四川成都IDC機房服務(wù)器托管/機柜租用。為您精選優(yōu)質(zhì)idc數(shù)據(jù)中心機房租用、服務(wù)器托管、機柜租賃、大帶寬租用,可選線路電信、移動、聯(lián)通等。


名稱欄目:功能重塑Redis中Resize功能的好處(redis的resize)
轉(zhuǎn)載源于:http://www.5511xx.com/article/dhgocgd.html