一、設(shè)置鍵的過期時(shí)間
Redis可以通過EXPIRE、PEXPIRE碍现、EXPIREAT幅疼、PEXPIREAT對(duì)鍵設(shè)置有效期,使用TTL或者PTTL查看鍵的有效期昼接,-1表示鍵是永久的爽篷,PERSIST可以移除一個(gè)鍵的過期時(shí)間。
二慢睡、過期鍵的判定
REDIS使用一個(gè)過期字典來保存鍵的過期時(shí)間逐工,通過過期字典,程序可以用以下步驟判斷鍵是否過期:
(1)檢查給定鍵是否存在過期字典:如果存在漂辐,那么取得鍵的過期時(shí)間
(2)檢查當(dāng)前UNIX時(shí)間戳是否大于鍵的過期時(shí)間:如果是泪喊,則過期
三、過期鍵刪除策略
存在三種刪除策略:
(1)定時(shí)刪除
在設(shè)置鍵的過期時(shí)間的同時(shí)髓涯,創(chuàng)建一個(gè)定時(shí)器袒啼,讓定時(shí)器在鍵的過期時(shí)間來臨時(shí),立即執(zhí)行對(duì)鍵的刪除操作纬纪。
優(yōu)點(diǎn):通過使用定時(shí)器蚓再,可以保證過期鍵會(huì)盡可能快的被刪除,被釋放過期鍵所占用的內(nèi)存包各。
缺點(diǎn):①對(duì)CPU時(shí)間是最不友好的:在過期鍵比較多的情況下摘仅,刪除過期鍵這一行為會(huì)占用很多的CPU時(shí)間,在內(nèi)存不緊張但是CPU緊張的情況下问畅,這種策略反而會(huì)對(duì)服務(wù)器的響應(yīng)時(shí)間和吞吐量造成影響娃属。②創(chuàng)建一個(gè)定時(shí)器需要用到Redis服務(wù)器中的時(shí)間事件 ——redis中是使用無序鏈表實(shí)現(xiàn)的,查找一個(gè)事件的時(shí)間復(fù)雜度為O(N),并不能高效的處理大量時(shí)間事件护姆。
(2)惰性刪除
放任鍵過期不管矾端,但是每次從鍵空間中獲取鍵時(shí),都檢查取得的鍵是否過期签则,如果過期的話须床,就刪除該鍵铐料。
優(yōu)點(diǎn):對(duì)CPU友好
缺點(diǎn):如果一個(gè)鍵已經(jīng)過期渐裂,而這個(gè)鍵又仍然保留在數(shù)據(jù)庫(kù)中,那么只要這個(gè)過期鍵不被刪除钠惩,所占用的內(nèi)存就不會(huì)釋放柒凉。過期且長(zhǎng)期不使用的鍵可以看成一種內(nèi)存泄漏。
(3)定期刪除
每隔一段時(shí)間進(jìn)行一次檢查篓跛,刪除里面的過期鍵膝捞。定期刪除是前兩種方案的一種折中。
難點(diǎn):確定刪除操作執(zhí)行的時(shí)長(zhǎng)和頻率愧沟。
Redis中使用的刪除策略是惰性刪除和定期刪除
四蔬咬、RDB鲤遥、AOF和復(fù)制功能對(duì)過期鍵的處理
RDB
1.生成RDB文件:執(zhí)行SAVE或者BGSAVE命令時(shí),已過期的鍵不會(huì)被寫入RDB文件林艘。
2.載入RDB文件:
(1) 如果服務(wù)器以主服務(wù)器模型運(yùn)行盖奈, 程序會(huì)對(duì)文件中保存的鍵進(jìn)行檢查,過期的鍵不會(huì)被載入到數(shù)據(jù)庫(kù)中狐援。
(2)如果服務(wù)器以從服務(wù)器模式運(yùn)行钢坦,不論文件中保存的鍵是否過期,都會(huì)被載入到數(shù)據(jù)庫(kù)中啥酱。不過因?yàn)橹鲝姆?wù)器在進(jìn)行同步的時(shí)候爹凹,從服務(wù)器的數(shù)據(jù)庫(kù)會(huì)被清空,所以過期鍵對(duì)RDB載入的服務(wù)器也不會(huì)造成影響镶殷。
AOF
1.AOF文件寫入:當(dāng)服務(wù)器以AOF持久化模式運(yùn)行時(shí)禾酱,如果某個(gè)鍵已經(jīng)過期,但是還沒有被惰性刪除或者定時(shí)刪除時(shí)绘趋,不會(huì)對(duì)AOF文件產(chǎn)生任何影響宇植。當(dāng)過期鍵被惰性刪除或者定時(shí)刪除后,想AOF文件中追加(append)一條DEL命令埋心。
2.AOF文件重寫:在執(zhí)行AOF文件的過程中指郁,程序會(huì)對(duì)數(shù)據(jù)庫(kù)中的鍵進(jìn)行檢查,已過期的鍵不會(huì)被保存到重寫后的AOF文件中拷呆。
復(fù)制
當(dāng)服務(wù)器運(yùn)行在復(fù)制模式下時(shí)闲坎,從服務(wù)器的過期鍵刪除動(dòng)作由主服務(wù)器控制:
①主服務(wù)器在刪除一個(gè)過期鍵之后會(huì)想從服務(wù)器發(fā)送一個(gè)DEL命令
②從服務(wù)器在執(zhí)行讀命令時(shí),即使碰到過期鍵也不會(huì)將過期鍵刪除茬斧,而是繼續(xù)像處理未過期的鍵一樣處理過期鍵
③從服務(wù)器只有接收到主服務(wù)器的DEL命令時(shí)才會(huì)刪除過期鍵腰懂。