PHP面試題 之 redis

Redis的緩存策略和主鍵失效機(jī)制

作為緩存系統(tǒng)都要定期清理無(wú)效數(shù)據(jù)五督,就需要一個(gè)主鍵失效和淘汰策略兴猩。

在Redis當(dāng)中埂陆,有生存期的key被稱為volatile煌张。在創(chuàng)建緩存時(shí)呐赡,要為給定的key設(shè)置生存期,當(dāng)key過(guò)期的時(shí)候(生存期為0)骏融,它可能會(huì)被刪除链嘀。

影響生存時(shí)間的一些操作

生存時(shí)間可以通過(guò)使用 DEL 命令來(lái)刪除整個(gè) key 來(lái)移除,或者被 SETGETSET 命令覆蓋原來(lái)的數(shù)據(jù)档玻,也就是說(shuō)怀泊,修改 key 對(duì)應(yīng)的value和使用另外相同的 keyvalue 來(lái)覆蓋以后,當(dāng)前數(shù)據(jù)的生存時(shí)間不同误趴。

比如說(shuō)霹琼,對(duì)一個(gè) key 執(zhí)行 INCR 命令,對(duì)一個(gè)列表進(jìn)行 LPUSH 命令冤留,或者對(duì)一個(gè)哈希表執(zhí)行HSET命令碧囊,這類操作都不會(huì)修改 key 本身的生存時(shí)間。另一方面纤怒,如果使用RENAME對(duì)一個(gè) key 進(jìn)行改名糯而,那么改名后的 key 的生存時(shí)間和改名前一樣。

RENAME命令的另一種可能是泊窘,嘗試將一個(gè)帶生存時(shí)間的 key 改名成另一個(gè)帶生存時(shí)間的 another_key 熄驼,這時(shí)舊的 another_key (以及它的生存時(shí)間)會(huì)被刪除,然后舊的 key 會(huì)改名為 another_key 烘豹,因此瓜贾,新的 another_key 的生存時(shí)間也和原本的 key 一樣。使用PERSIST命令可以在不刪除 key 的情況下携悯,移除 key 的生存時(shí)間祭芦,讓 key 重新成為一個(gè) persistent key

如何更新生存時(shí)間

可以對(duì)一個(gè)已經(jīng)帶有生存時(shí)間的 key 執(zhí)行 EXPIRE 命令憔鬼,新指定的生存時(shí)間會(huì)取代舊的生存時(shí)間龟劲。過(guò)期時(shí)間的精度已經(jīng)被控制在1ms之內(nèi)胃夏,主鍵失效的時(shí)間復(fù)雜度是O(1),
EXPIRETTL 命令搭配使用昌跌,TTL 可以查看 key 的當(dāng)前生存時(shí)間仰禀。設(shè)置成功返回 1;當(dāng) key 不存在或者不能為 key 設(shè)置生存時(shí)間時(shí)蚕愤,返回 0 答恶。

最大緩存配置

在 redis 中,允許用戶設(shè)置最大使用內(nèi)存大小

server.maxmemory

默認(rèn)為0萍诱,沒(méi)有指定最大緩存悬嗓,如果有新的數(shù)據(jù)添加,超過(guò)最大內(nèi)存砂沛,則會(huì)使 redis 崩潰烫扼,所以一定要設(shè)置。redis 內(nèi)存數(shù)據(jù)集大小上升到一定大小的時(shí)候碍庵,就會(huì)實(shí)行數(shù)據(jù)淘汰策略。

redis 提供 6種數(shù)據(jù)淘汰策略

volatile-lru:從已設(shè)置過(guò)期時(shí)間的數(shù)據(jù)集(server.db[i].expires)中挑選最近最少使用的數(shù)據(jù)淘汰
volatile-ttl:從已設(shè)置過(guò)期時(shí)間的數(shù)據(jù)集(server.db[i].expires)中挑選將要過(guò)期的數(shù)據(jù)淘汰
volatile-random:從已設(shè)置過(guò)期時(shí)間的數(shù)據(jù)集(server.db[i].expires)中任意選擇數(shù)據(jù)淘汰
allkeys-lru:從數(shù)據(jù)集(server.db[i].dict)中挑選最近最少使用的數(shù)據(jù)淘汰
allkeys-random:從數(shù)據(jù)集(server.db[i].dict)中任意選擇數(shù)據(jù)淘汰
no-enviction(驅(qū)逐):禁止驅(qū)逐數(shù)據(jù)

注意這里的6種機(jī)制悟狱,volatile和allkeys規(guī)定了是對(duì)已設(shè)置過(guò)期時(shí)間的數(shù)據(jù)集淘汰數(shù)據(jù)還是從全部數(shù)據(jù)集淘汰數(shù)據(jù)静浴,后面的lru、ttl以及random是三種不同的淘汰策略挤渐,再加上一種no-enviction永不回收的策略苹享。

使用策略規(guī)則

1、如果數(shù)據(jù)呈現(xiàn)冪律分布浴麻,也就是一部分?jǐn)?shù)據(jù)訪問(wèn)頻率高得问,一部分?jǐn)?shù)據(jù)訪問(wèn)頻率低,則使用allkeys-lru
2软免、如果數(shù)據(jù)呈現(xiàn)平等分布宫纬,也就是所有的數(shù)據(jù)訪問(wèn)頻率都相同,則使用allkeys-random

三種數(shù)據(jù)淘汰策略

ttlrandom 比較容易理解膏萧,實(shí)現(xiàn)也會(huì)比較簡(jiǎn)單漓骚。主要是Lru最近最少使用淘汰策略,設(shè)計(jì)上會(huì)對(duì) key 按失效時(shí)間排序榛泛,然后取最先失效的 key 進(jìn)行淘汰

http://www.cnblogs.com/hanqishihu/p/5560767.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蝌蹂,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子曹锨,更是在濱河造成了極大的恐慌孤个,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沛简,死亡現(xiàn)場(chǎng)離奇詭異齐鲤,居然都是意外死亡斥废,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門佳遂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)营袜,“玉大人,你說(shuō)我怎么就攤上這事丑罪〖园澹” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵吩屹,是天一觀的道長(zhǎng)跪另。 經(jīng)常有香客問(wèn)我,道長(zhǎng)煤搜,這世上最難降的妖魔是什么免绿? 我笑而不...
    開(kāi)封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮擦盾,結(jié)果婚禮上嘲驾,老公的妹妹穿的比我還像新娘。我一直安慰自己迹卢,他們只是感情好辽故,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著腐碱,像睡著了一般誊垢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上症见,一...
    開(kāi)封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天喂走,我揣著相機(jī)與錄音,去河邊找鬼谋作。 笑死芋肠,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的瓷们。 我是一名探鬼主播业栅,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼谬晕!你這毒婦竟也來(lái)了碘裕?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤攒钳,失蹤者是張志新(化名)和其女友劉穎帮孔,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡文兢,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年晤斩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片姆坚。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡澳泵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出兼呵,到底是詐尸還是另有隱情兔辅,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布击喂,位于F島的核電站维苔,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏懂昂。R本人自食惡果不足惜介时,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望凌彬。 院中可真熱鬧沸柔,春花似錦、人聲如沸铲敛。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)原探。三九已至,卻和暖如春顽素,著一層夾襖步出監(jiān)牢的瞬間咽弦,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工胁出, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留型型,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓全蝶,卻偏偏與公主長(zhǎng)得像闹蒜,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子抑淫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容