新聞中心
Redis中多線(xiàn)程處理過(guò)期策略

十余年的昔陽(yáng)網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。全網(wǎng)整合營(yíng)銷(xiāo)推廣的優(yōu)勢(shì)是能夠根據(jù)用戶(hù)設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整昔陽(yáng)建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)公司從事“昔陽(yáng)網(wǎng)站設(shè)計(jì)”,“昔陽(yáng)網(wǎng)站推廣”以來(lái),每個(gè)客戶(hù)項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
Redis是一款高性能的NoSQL數(shù)據(jù)庫(kù),在緩存方面應(yīng)用非常廣泛。Redis通過(guò)使用過(guò)期時(shí)間來(lái)控制緩存的數(shù)據(jù)時(shí)效性,但是隨著Redis存儲(chǔ)的數(shù)據(jù)規(guī)模越來(lái)越大,過(guò)期鍵的數(shù)量也逐漸增加,給Redis帶來(lái)了很大的負(fù)擔(dān)。為了解決這個(gè)問(wèn)題,Redis引入了多線(xiàn)程機(jī)制處理過(guò)期策略。
一、Redis過(guò)期策略
Redis中使用的鍵值對(duì)都可以設(shè)置一個(gè)過(guò)期時(shí)間,當(dāng)該鍵值對(duì)的過(guò)期時(shí)間到達(dá)時(shí),Redis會(huì)自動(dòng)將該鍵值對(duì)刪除。Redis中有兩種過(guò)期策略:定期刪除和惰性刪除。
1. 定期刪除:Redis默認(rèn)情況下每隔100ms就會(huì)隨機(jī)測(cè)試一些設(shè)置了過(guò)期時(shí)間的鍵值對(duì),取出其中過(guò)期的鍵值對(duì)進(jìn)行刪除。這種策略的缺點(diǎn)是會(huì)浪費(fèi)一定的CPU資源進(jìn)行檢查,同時(shí)對(duì)于存活時(shí)間較短的鍵值對(duì)可能會(huì)錯(cuò)過(guò)過(guò)期時(shí)間。
2. 惰性刪除:Redis的惰性刪除策略遵循“用時(shí)刪除”的原則,只有在鍵值對(duì)被訪(fǎng)問(wèn)時(shí)才會(huì)檢查當(dāng)前鍵值對(duì)是否過(guò)期,如果發(fā)現(xiàn)過(guò)期就刪除。這種策略不會(huì)浪費(fèi)CPU資源,但是會(huì)占用更多的內(nèi)存,且對(duì)于長(zhǎng)時(shí)間未訪(fǎng)問(wèn)的鍵值對(duì)無(wú)法進(jìn)行及時(shí)刪除。
二、Redis 4.0多線(xiàn)程過(guò)期處理
Redis 4.0版本中引入了多線(xiàn)程機(jī)制處理過(guò)期策略,采用的是定期刪除和惰性刪除方式的組合。通過(guò)設(shè)置一個(gè)新的配置項(xiàng)“activerehashing”,啟用新的掃描器線(xiàn)程,該線(xiàn)程可以平滑的升級(jí)eviction策略。
1. 多線(xiàn)程過(guò)期處理的優(yōu)勢(shì):
(1)大大減少了對(duì)CPU的占用,提高了系統(tǒng)的性能。
(2)減少了在主線(xiàn)程中執(zhí)行刪除操作所需的時(shí)間,加快了執(zhí)行效率。
(3)增加了系統(tǒng)容錯(cuò)性,避免了單點(diǎn)故障的情況下緩存不可用的風(fēng)險(xiǎn)。
(4)解決了單線(xiàn)程模型下過(guò)期鍵集中的問(wèn)題,提高了內(nèi)存利用率。
2. 開(kāi)啟多線(xiàn)程過(guò)期處理:
在redis的配置文件中將“activerehashing”參數(shù)設(shè)置為“yes”,并將“hz”參數(shù)增加到100(默認(rèn)為10)來(lái)增加掃描次數(shù)。
# Redis configuration file example
activerehashing yes
hz 100
三、定制化過(guò)期處理
Redis 4.0多線(xiàn)程過(guò)期處理有時(shí)可能不能滿(mǎn)足特定的業(yè)務(wù)需求,可以通過(guò)輕量級(jí)標(biāo)準(zhǔn)庫(kù)“uv”提供的特性,實(shí)現(xiàn)自定義的過(guò)期鍵功能。
1. 自定義過(guò)期鍵
以設(shè)置SLOWLY_EXPIRE的鍵值對(duì)作為例子,利用管道(Pipeline)進(jìn)行批量查詢(xún)和批量刪除的功能,定制化的過(guò)期處理如下:
int expire_slowly(redisContext* c, int id, int64_t timeout) {
redisReply* reply = NULL;
const char * argv[] = {“SET”, “SLOWLY_EXPIRE”, “1”, “PX”, timeout, “NX”, NULL};
reply = redisCommandArgv(c, 6, argv, NULL);
if (reply == NULL) {
redisFree(c);
return -1;
}
freeReplyObject(reply);
return 0;
}
int delete_slowly(redisContext *c, int id) {
redisReply *reply;
const char* argv[] = { “DEL”, “SLOWLY_EXPIRE”, NULL };
reply = redisCommandArgv(c, 2, argv, NULL);
if (reply == NULL) {
redisFree(c);
return -1;
}
freeReplyObject(reply);
return 0;
}
2. 主動(dòng)調(diào)用過(guò)期鍵
設(shè)置完自定義過(guò)期鍵之后,我們可以通過(guò)類(lèi)似“SELECT * FROM TABLE WHERE EVENT_TIME
通過(guò)定制化過(guò)期處理,我們可以更好地根據(jù)業(yè)務(wù)需求,充分發(fā)揮Redis的性能和可用性。
成都網(wǎng)站建設(shè)選創(chuàng)新互聯(lián)(?:028-86922220),專(zhuān)業(yè)從事成都網(wǎng)站制作設(shè)計(jì),高端小程序APP定制開(kāi)發(fā),成都網(wǎng)絡(luò)營(yíng)銷(xiāo)推廣等一站式服務(wù)。
文章名稱(chēng):Redis中多線(xiàn)程處理過(guò)期策略(redis過(guò)期多線(xiàn)程)
鏈接地址:http://www.fisionsoft.com.cn/article/dpigess.html


咨詢(xún)
建站咨詢(xún)
