定期刪除Tair或Redis過期Key
當(dāng)Tair/Redis數(shù)據(jù)過期后,Tair/Redis將根據(jù)默認(rèn)策略逐步刪除已過期的數(shù)據(jù),這導(dǎo)致過期數(shù)據(jù)仍然占據(jù)著內(nèi)存空間。您可以在系統(tǒng)運(yùn)維管理(簡(jiǎn)稱OOS)中配置定期運(yùn)維任務(wù),在業(yè)務(wù)低峰期,掃描(SCAN)所有Key并立即刪除已過期的Key,釋放內(nèi)存占用。
背景信息
Tair/Redis為保障讀寫性能,其刪除邏輯為異步刪除。當(dāng)數(shù)據(jù)過期后,Tair/Redis不會(huì)立即刪除已過期的數(shù)據(jù),而是通過主動(dòng)刪除(后臺(tái)定期掃描、刪除部分過期Key)與被動(dòng)刪除(當(dāng)用戶訪問到過期Key,則刪除)的方式對(duì)過期Key進(jìn)行逐步刪除,因此過期數(shù)據(jù)仍然占據(jù)著內(nèi)存空間。在極端情況下,當(dāng)大量數(shù)據(jù)同時(shí)過期時(shí),數(shù)據(jù)會(huì)立即過期,但需要較長(zhǎng)時(shí)間進(jìn)行刪除、回收內(nèi)存空間。
您可以參考本方案,免費(fèi)使用OOS服務(wù),定時(shí)調(diào)用Tair/Redis的FlushExpireKeys API來(lái)掃描(SCAN)所有Key并立即刪除已過期的Key。
SCAN命令掃描所有數(shù)據(jù)會(huì)使實(shí)例的CPU負(fù)載上升,建議您在業(yè)務(wù)低峰期執(zhí)行該任務(wù)。
前提條件
您需要為OOS服務(wù)創(chuàng)建一個(gè)RAM角色,用于OOS服務(wù)訪問Tair/Redis服務(wù),具體操作請(qǐng)參見為OOS服務(wù)設(shè)置RAM權(quán)限。
您可以為該角色授予系統(tǒng)權(quán)限策略AliyunKvstoreFullAccess。授權(quán)后,RAM角色可以管理Tair/Redis所有資源。
您也可以自定義最小權(quán)限策略(允許OOS調(diào)用Tair/Redis的DescribeInstances與FlushExpireKeys API),限定該角色只能執(zhí)行當(dāng)前任務(wù)。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "kvstore:DescribeInstances", "kvstore:FlushExpireKeys" ], "Resource": "*" } ] }
操作步驟
訪問OOS控制臺(tái)。
在左側(cè)導(dǎo)航欄,單擊
。單擊創(chuàng)建。
配置定時(shí)運(yùn)維任務(wù)。
說(shuō)明本文僅介紹關(guān)鍵步驟,其他參數(shù)請(qǐng)參見定時(shí)運(yùn)維。
定時(shí)設(shè)置
本示例選擇周期性重復(fù)執(zhí)行,指定每天04:00與16:00執(zhí)行。
同時(shí)指定規(guī)則結(jié)束時(shí)間為2024-03-31 00:00:00,表示該定時(shí)運(yùn)維任務(wù)將在該時(shí)間點(diǎn)結(jié)束,不再執(zhí)行。
選擇模板
在公共模板中搜索ACS-Redis-FlushExpireKeys,并勾選該模板。
設(shè)置模板參數(shù)
選擇Tair/Redis實(shí)例所在的地域,選擇目標(biāo)實(shí)例。
在OOS扮演的RAM角色中選擇在前提條件中創(chuàng)建的RAM角色。
執(zhí)行設(shè)置(可選)
該頁(yè)簽配置項(xiàng)可保持默認(rèn)。
單擊創(chuàng)建,并在彈框中單擊確認(rèn)。
當(dāng)任務(wù)的執(zhí)行狀態(tài)顯示生效中,表示該任務(wù)將根據(jù)定時(shí)設(shè)置自動(dòng)執(zhí)行。
后續(xù)步驟
您可以在定時(shí)運(yùn)維任務(wù)列表中,單擊目標(biāo)執(zhí)行ID,進(jìn)入任務(wù)詳情頁(yè)。在該頁(yè)面中,您可以查看或修改任務(wù)配置信息、立即觸發(fā)執(zhí)行、查看執(zhí)行歷史信息等。
同時(shí),由于過期數(shù)據(jù)被刪除、內(nèi)存得以回收,您也可以在Tair/Redis的性能監(jiān)控中看到該實(shí)例的內(nèi)存使用率降低了。
相關(guān)文檔
您也可以在OOS中配置告警與事件運(yùn)維,例如當(dāng)內(nèi)存使用率(平均值)達(dá)到90%時(shí),調(diào)用FlushExpireKeys API刪除已過期的Key。配置方式與本方案類似,配置入口為 ,更多信息請(qǐng)參見創(chuàng)建告警運(yùn)維任務(wù)。
關(guān)于Tair/Redis刪除過期數(shù)據(jù)的介紹,請(qǐng)參見Tair/Redis如何清除過期Key。