APP開發(fā)怎樣限制使用最大內(nèi)存經(jīng)驗(yàn),如果Redis因?yàn)槭褂昧诉^多的物理內(nèi)存而導(dǎo)致使用交換分區(qū)后,很容易導(dǎo)致Redis崩潰。為了防止Redis使用過多的物理內(nèi)存,可以通過配置文件中“maxmemorv”的參數(shù)限制Redis使用的物理內(nèi)存。
當(dāng)Redis使用的物理內(nèi)存達(dá)到了限制值,任何write操作(比如set)會(huì)觸發(fā)“數(shù)據(jù)清除策略”,通過配置文件中的“maxmemory-policy”來采用特定的“數(shù)據(jù)清除策略”,深圳APP開發(fā)公司整理Redis中定義的數(shù)據(jù)清除策略如下。
volatile-lru:對(duì)設(shè)置了過期時(shí)間的數(shù)據(jù),將過期的數(shù)據(jù)移除,或者按照LRU(先進(jìn)先出)算法移除。如果移除后的空閑內(nèi)存還不滿足寫入數(shù)據(jù)所需的內(nèi)存空間,則提示寫入異常。
1.allkeys-lru:對(duì)所有的數(shù)據(jù)采用LRU(先進(jìn)先出)算法。
2.volatile-random::對(duì)設(shè)置了過期時(shí)間的數(shù)據(jù),采取“隨機(jī)選取”算法移除數(shù)據(jù)。如果移除后的空閑內(nèi)存還不滿足寫入數(shù)據(jù)所需的內(nèi)存空間,則提示寫入異常。
3.allkeys-random:對(duì)所有的數(shù)據(jù)采取“隨機(jī)選取”算法移除數(shù)據(jù),直到空閑內(nèi)存滿足寫入數(shù)據(jù)所需的內(nèi)存空間為止。
4.volatile-ttl:對(duì)設(shè)置了過期時(shí)間的數(shù)據(jù)采取TTL算法(最小存活時(shí)間),移除即將過期的數(shù)據(jù)。
5.uoeviction:不做任何干擾操作,直接返回寫入異常。
APP開發(fā)如何設(shè)置過期時(shí)間
Redis中可以通過下面的命令設(shè)置Key的超時(shí)時(shí)間。
EXPIRE key seconds
超過超時(shí)時(shí)間后,該Key與對(duì)應(yīng)的數(shù)據(jù)會(huì)被Redis刪除。通過刪除過期的Key,可以在定程度上優(yōu)化內(nèi)存的使用。當(dāng)設(shè)置了超時(shí)時(shí)間的數(shù)據(jù)被修改后,設(shè)置的超時(shí)時(shí)間會(huì)失效。
在Redis的每個(gè)數(shù)據(jù)庫(kù)中(Redis有16個(gè)db,默認(rèn)是使用db0),會(huì)使用下面的數(shù)據(jù)模型記錄下所有設(shè)置了過期時(shí)間的Key和過期的時(shí)間(用時(shí)間戳表示,時(shí)間戳精確到毫秒),如圖7-14所示。
Redis用如下的步驟檢查某個(gè)Key是否過期
(1)檢查Key是否存在于設(shè)置了過期時(shí)間的key中,如果存在,則取出過期時(shí)間。
(2)檢查當(dāng)前時(shí)間的時(shí)間戳是否大干Key的過期時(shí)間如果是的話,則表示Key己過期,否則,Key未過期
設(shè)置了Key的過期時(shí)間后Redis采用下面的兩種策略刪除過期的Key
1.惰性刪除
Redis操作Key時(shí),如果發(fā)現(xiàn)Key已經(jīng)過期了,則刪除過期的Key。這種策略的好處是不占用過多的CPU資源,只有Redis操作Key時(shí)才檢查,保證不會(huì)在其他Key上消耗CPU資源,壞處是只有操作Key時(shí)才檢查該Key是否過期,這樣過期的Key的數(shù)據(jù)依然長(zhǎng)期存儲(chǔ)在內(nèi)存中,占據(jù)內(nèi)存的空間。
使用隋性刪除策略時(shí),如果內(nèi)存中存在大量的過期的Key,而這些Key沒有被訪問過會(huì)占用大量的內(nèi)存空間,操作系統(tǒng)無(wú)法釋放內(nèi)存。這種刪除策略對(duì)于數(shù)據(jù)都存儲(chǔ)于內(nèi)存的Redis來說非常糟糕。
如果App后臺(tái)把Redis作為個(gè)存儲(chǔ)系統(tǒng),App業(yè)務(wù)當(dāng)中肯定會(huì)存儲(chǔ)些玲數(shù)據(jù),例如些不活躍的用戶數(shù)據(jù),這些用戶注冊(cè)后不再打開App,就變成冷數(shù)據(jù)。這些冷數(shù)據(jù)的特點(diǎn)是當(dāng)寫入后很長(zhǎng)時(shí)間內(nèi)部不會(huì)被訪問。如果只依賴于Redis的惰性刪除,這部分冷數(shù)據(jù)直占用著內(nèi)存,沒法清理內(nèi)存空間。
2.定期刪除
Redis為了補(bǔ)救惰性刪除策略的不足,釋放更多的內(nèi)存,也對(duì)過期的Key同時(shí)采用了定期刪除的策略。
定期刪除策略是每隔段時(shí)間,Redis檢查所有設(shè)置了過期時(shí)間的Key,如果發(fā)現(xiàn)當(dāng)前時(shí)間已經(jīng)超過了該Key的過期時(shí)間,就把Key和對(duì)應(yīng)的數(shù)據(jù)刪除。為了保證Redis的高性能,Redis執(zhí)行定期刪除策略的頻率和時(shí)長(zhǎng)都有限制。APP開發(fā)公司關(guān)于制作APP時(shí)怎樣限制最大使用沒存以及如何設(shè)置過期時(shí)間的經(jīng)驗(yàn)介紹本文就到這里。博納網(wǎng)絡(luò)會(huì)定期更新關(guān)于APP開發(fā)方面的實(shí)操經(jīng)驗(yàn),希望本站的這類型的經(jīng)驗(yàn)對(duì)您的工作有所幫助。謝謝關(guān)注。