Redis-數(shù)據(jù)淘汰策略&持久化方式(RDB/AOF)&Redis與Memcached區(qū)別

Redis與Memcached區(qū)別:

兩者都是非關(guān)系型數(shù)據(jù)庫(kù)终畅。主要有以下不同:

數(shù)據(jù)類型:
  • Memcached僅支持字符串類型亡容。
  • redis支持:String,List,set,zset,hash 可以靈活的解決問(wèn)題讼稚。
數(shù)據(jù)持久化:
  • Memcached不支持持久化。
  • Redis采用兩種持久化策略:RDB快照和AOF日志。
分布式:
  • Mencached不支持分布式扒寄,只能在客戶端使用一致性hash來(lái)實(shí)現(xiàn)分布式存儲(chǔ),這種方式在存儲(chǔ)和查詢時(shí)都需要在客戶端先計(jì)算一次數(shù)據(jù)所在的節(jié)點(diǎn)拟烫。
  • redis cluster實(shí)現(xiàn)了分布式的支持该编。
內(nèi)存管理機(jī)制:
  • redis中,并不是所有數(shù)據(jù)都一直存儲(chǔ)在內(nèi)存中硕淑,可以將一些很久沒(méi)用的value交換到磁盤课竣,而memcached數(shù)據(jù)則候會(huì)一直在內(nèi)存中。
  • memcached將內(nèi)存分割成特定的塊進(jìn)行存儲(chǔ)置媳,以完全解決內(nèi)存碎片化的問(wèn)題于樟,但是這種方式使得內(nèi)存利用率不高,如塊大小128bytes拇囊,只存儲(chǔ)了100bytes的數(shù)據(jù)迂曲,那么剩下的28bytes就浪費(fèi)掉了。

鍵的過(guò)期時(shí)間:

redis可以為每個(gè)鍵設(shè)置過(guò)期時(shí)間寥袭,當(dāng)鍵過(guò)期時(shí)路捧,自動(dòng)刪除該鍵。
對(duì)于散列表這種容器传黄,只能為整個(gè)鍵設(shè)置過(guò)期時(shí)間(整個(gè)散列表)杰扫,而不是為鍵里面的單個(gè)元素設(shè)置過(guò)期時(shí)間。

設(shè)置鍵的生存時(shí)間:
  • expire: 指定秒
  • pexpire: 指定毫秒
127.0.0.1:6379> set key hello
OK
127.0.0.1:6379> expire key 1
(integer) 1
127.0.0.1:6379> get key
(nil)
127.0.0.1:6379> hset hashkey key1 1
(integer) 0
127.0.0.1:6379> hget hashkey key1
"1"
127.0.0.1:6379> expire hashkey 1
(integer) 1
127.0.0.1:6379> hget hashkey key1
(nil)
127.0.0.1:6379> zadd zset 0 key1 1 key2
(integer) 0
127.0.0.1:6379> zrange zset 0 -1
1) "key1"
2) "key3"
3) "key2"
127.0.0.1:6379> expire zset 1
(integer) 1
127.0.0.1:6379> zrange zset 0 -1
(empty list or set)
設(shè)置過(guò)期時(shí)間:過(guò)期時(shí)間是一個(gè)unix時(shí)間戳
  • expireat:秒精度
  • pexpireat:毫秒精度

過(guò)期鍵的刪除策略:

定時(shí)刪除:

在設(shè)置鍵的過(guò)期時(shí)間的同時(shí)膘掰,創(chuàng)建一個(gè)定時(shí)器章姓,讓定時(shí)器在鍵過(guò)期時(shí)間來(lái)臨時(shí),立即執(zhí)行對(duì)鍵的刪除操作炭序。

  • [ ] 優(yōu)點(diǎn):對(duì)內(nèi)存是友好的啤覆,可以保證過(guò)期鍵會(huì)盡可能快被刪除,并釋放過(guò)期鍵所占用的內(nèi)存惭聂。
  • [ ] 缺點(diǎn):對(duì)CPU不友好,在過(guò)期鍵較多的情況下相恃,刪除鍵的操作會(huì)占用相當(dāng)一部分的CPU時(shí)間辜纲,在內(nèi)存不緊張但CPU緊張的情況下,將cpu時(shí)間用在刪除與當(dāng)前任務(wù)無(wú)關(guān)的過(guò)期鍵上拦耐,無(wú)疑會(huì)對(duì)服務(wù)器的響應(yīng)時(shí)間和吞吐量造成影響耕腾。
    此外,定時(shí)器需要使用redis服務(wù)器的時(shí)間事件杀糯,時(shí)間事件的實(shí)現(xiàn)方式為無(wú)序鏈表扫俺,查找一個(gè)事件的事件復(fù)雜度為O(N),因此創(chuàng)建大量的定時(shí)器不現(xiàn)實(shí)固翰。
惰性刪除:

僅在程序取出鍵時(shí)才進(jìn)行過(guò)期檢查

  • [ ] 優(yōu)點(diǎn): CPU友好狼纬,不會(huì)花費(fèi)額外的時(shí)間羹呵。
  • [ ] 缺點(diǎn):對(duì)內(nèi)存不友好,會(huì)造成內(nèi)存泄漏疗琉。
定期刪除:

每隔一段時(shí)間執(zhí)行一次刪除過(guò)期鍵操作冈欢,并通過(guò)限制刪除操作執(zhí)行的時(shí)長(zhǎng)和頻率來(lái)減少對(duì)CPU時(shí)間的影響。

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

可以設(shè)置內(nèi)存最大使用量盈简,當(dāng)內(nèi)存使用超出時(shí)凑耻,施行數(shù)據(jù)淘汰策略。


作為內(nèi)存數(shù)據(jù)庫(kù)柠贤,出于對(duì)性能和內(nèi)存消耗的考慮香浩,redis的淘汰算法實(shí)際上并未針對(duì)所有key,而是抽樣一小部分并且從中選出被淘汰的key臼勉。
使用reids緩存數(shù)據(jù)時(shí)弃衍,為提高緩存命中率,需要保證緩存都是熱點(diǎn)數(shù)據(jù)坚俗【刀ⅲ可以將內(nèi)存最大使用量設(shè)置為熱點(diǎn)數(shù)據(jù)占用的內(nèi)存量,然后啟用allkeys-lru淘汰策略猖败,將最近最少未使用的數(shù)據(jù)進(jìn)行淘汰速缆。
redis4.0 版本后引入了volatile-lfu和allkeys-lfu淘汰策略LFU策略通過(guò)統(tǒng)計(jì)訪問(wèn)頻率恩闻,將訪問(wèn)頻率最小的鍵值進(jìn)行淘汰艺糜。

持久化:

redis是內(nèi)存型數(shù)據(jù)庫(kù),為了保證數(shù)據(jù)在斷電后不會(huì)丟失幢尚,需要將內(nèi)存中的數(shù)據(jù)持久化到硬盤上破停。

RDB持久化:

  • 將某個(gè)時(shí)間點(diǎn)的所有數(shù)據(jù)都存放到硬盤上。
  • 可以將快照復(fù)制到其他服務(wù)器從而創(chuàng)建具有相同數(shù)據(jù)的服務(wù)器副本尉剩。
  • 如果系統(tǒng)方法故障真慢,將會(huì)丟失最后一次快照后的數(shù)據(jù)。
  • 如果數(shù)據(jù)量很大理茎,保存快照時(shí)間會(huì)很長(zhǎng)黑界。
手動(dòng)觸發(fā):
  • [ ] redis命令
  • save:生成RDB文件,會(huì)阻塞服務(wù)器進(jìn)程皂林,知直到RDB文件創(chuàng)建完畢朗鸠。
  • bgsave: 派生(fork)一個(gè)子進(jìn)程,然后由子進(jìn)程負(fù)責(zé)創(chuàng)建RDB文件础倍,父進(jìn)程繼續(xù)處理命令請(qǐng)求烛占。
自動(dòng)觸發(fā):
  • 使用save相關(guān)配置,如“save m n”沟启。表示m秒中對(duì)數(shù)據(jù)集進(jìn)行n次修改忆家,就觸發(fā)bgsave犹菇。
  • 如果從節(jié)點(diǎn)執(zhí)行全量復(fù)制操作,主節(jié)點(diǎn)自動(dòng)執(zhí)行bgsave生成RDB文件發(fā)送給從文件弦赖。
  • 執(zhí)行debug reload 命令重新加載redis時(shí)项栏,自動(dòng)觸發(fā)save操作。
  • 默認(rèn)情況下執(zhí)行shutdown命令時(shí)蹬竖,若沒(méi)有開(kāi)啟AOF持久化功能則自動(dòng)執(zhí)行bgsave沼沈。
優(yōu)缺點(diǎn):
  • [ ] 優(yōu)點(diǎn): 適用于備份,全量復(fù)制等場(chǎng)景币厕×辛恚恢復(fù)數(shù)據(jù)遠(yuǎn)快于AOF方法。
  • [ ] 缺點(diǎn):沒(méi)辦法做到實(shí)時(shí)持久化/秒級(jí)持久化旦装。 RDB使用特定二進(jìn)制格式页衙,redis演化中有多個(gè)RDB版本,存在版本不兼容情況阴绢。

AOF 持久化:

將寫(xiě)命令添加到AOF文件的末尾(append Only File)
使用AOF持久化需要設(shè)置同步選項(xiàng)店乐,從而保證寫(xiě)命令什么時(shí)候會(huì)被同步到磁盤文件上。這時(shí)因?yàn)閷?duì)文件進(jìn)行寫(xiě)入并不會(huì)呻袭,馬上將內(nèi)容同步到磁盤上眨八,而是先存儲(chǔ)到緩沖區(qū),然后由操作系統(tǒng)決定什么時(shí)候同步到磁盤左电。有以下同步方式:


  • always:每個(gè)寫(xiě)命令都同步廉侧。嚴(yán)重影響服務(wù)器性能
  • everysec:每秒同步一次÷ㄗ悖可以保證系統(tǒng)崩潰時(shí)只丟失一秒左右的數(shù)據(jù)段誊,每秒執(zhí)行一次對(duì)性能幾乎沒(méi)影響。
  • no:讓操作系統(tǒng)決定栈拖,最長(zhǎng)30秒连舍。不能帶來(lái)太多的性能提升,但是會(huì)增加系統(tǒng)崩潰時(shí)數(shù)據(jù)丟失的數(shù)量辱魁。
    隨著服務(wù)器寫(xiě)請(qǐng)求的增多烟瞧,AOF文件會(huì)越來(lái)越大。redis提供了一種將AOF重寫(xiě)的特性染簇,能夠去除AOF文件中冗余的寫(xiě)命令。
為什么會(huì)變星堪丁:
  1. 進(jìn)程中已經(jīng)超時(shí)數(shù)據(jù)不再寫(xiě)入文件锻弓。
  2. 舊的AOF文件含有無(wú)效命令。
  3. 多條命令合并(對(duì)同一鍵值的更新)蝌箍。

==感覺(jué)文章不錯(cuò)的同學(xué)麻煩動(dòng)動(dòng)小手點(diǎn)點(diǎn)關(guān)注訂閱唄,您的肯定是對(duì)我持續(xù)更新最大的支持!==

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末青灼,一起剝皮案震驚了整個(gè)濱河市暴心,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌杂拨,老刑警劉巖专普,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異弹沽,居然都是意外死亡檀夹,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門策橘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)炸渡,“玉大人,你說(shuō)我怎么就攤上這事丽已“龆拢” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵沛婴,是天一觀的道長(zhǎng)吼畏。 經(jīng)常有香客問(wèn)我,道長(zhǎng)嘁灯,這世上最難降的妖魔是什么泻蚊? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮旁仿,結(jié)果婚禮上藕夫,老公的妹妹穿的比我還像新娘。我一直安慰自己枯冈,他們只是感情好毅贮,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著尘奏,像睡著了一般滩褥。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上炫加,一...
    開(kāi)封第一講書(shū)人閱讀 52,262評(píng)論 1 308
  • 那天瑰煎,我揣著相機(jī)與錄音,去河邊找鬼俗孝。 笑死酒甸,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的赋铝。 我是一名探鬼主播插勤,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了农尖?” 一聲冷哼從身側(cè)響起析恋,我...
    開(kāi)封第一講書(shū)人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎盛卡,沒(méi)想到半個(gè)月后助隧,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡滑沧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年并村,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嚎货。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡橘霎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出殖属,到底是詐尸還是另有隱情姐叁,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布洗显,位于F島的核電站外潜,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏挠唆。R本人自食惡果不足惜处窥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望玄组。 院中可真熱鬧滔驾,春花似錦、人聲如沸俄讹。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)患膛。三九已至摊阀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間踪蹬,已是汗流浹背胞此。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留跃捣,地道東北人漱牵。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像疚漆,于是被迫代替她去往敵國(guó)和親布疙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蚊惯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

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

  • 一愿卸、Redis高可用概述 在介紹Redis高可用之前灵临,先說(shuō)明一下在Redis的語(yǔ)境中高可用的含義。 我們知道趴荸,在w...
    空語(yǔ)閱讀 1,598評(píng)論 0 2
  • 轉(zhuǎn)自:https://www.toutiao.com/a6708324379190624782/ 使用 Redis...
    大魚(yú)燉海棠閱讀 440評(píng)論 0 1
  • 本文檔翻譯自http://redis.io/topics/persistence儒溉。 這篇文章提供了 Redis 持...
    daos閱讀 696評(píng)論 0 10
  • 那時(shí)我們都在西寧讀大學(xué),生活簡(jiǎn)單而自由发钝。 每天除了學(xué)校的課程顿涣,我們會(huì)牽著手走遍西寧的每一條街道,累了便隨便走進(jìn)哪家...
    三水林楓閱讀 1,495評(píng)論 25 49
  • 沒(méi)什么事情了酝豪,準(zhǔn)備一下涛碑,下周去新項(xiàng)目了。早上送女朋友去上班孵淘,完事吃了早點(diǎn)回來(lái)蒲障。然后試著抓取了下包圖網(wǎng)上的音樂(lè)資源,...
    Reaq閱讀 122評(píng)論 0 0