一、mysql的MEMORY引擎為什么沒有redis的應用廣泛
從kv緩(huan)存(cun)(cun)的作用看,mysql優點不在kv緩(huan)存(cun)(cun)上,用它做kv緩(huan)存(cun)(cun)維護成本高,redis安(an)裝啟動使用簡單(dan),mysql效(xiao)率(lv)功能也沒redis強大,
redis專門針對一些場景做了優化(hua),例如(ru)計(ji)數(shu)(shu)器,可(ke)以(yi)精確計(ji)數(shu)(shu),精度要求不(bu)高(gao)也可(ke)以(yi)模糊(hu)計(ji)數(shu)(shu),占用(yong)內存更(geng)少(shao);集合(he)間的各種操(cao)作更(geng)簡單(dan)高(gao)效,典型應用(yong)場景社(she)交應用(yong)下好友,粉絲各種操(cao)作。
redis支持兩(liang)種(zhong)數(shu)據持久化方式:RDB和AOF,這也(ye)是redis區別與其他nosql內存數(shu)據庫的一個主要特點。
RDB主要可以用作冷備(bei)(bei),默認情況(kuang)下每5分鐘(zhong)將會(hui)fork出一個(ge)子進程,進行當(dang)前數據(ju)快照的持久化(這里的內存為了保證備(bei)(bei)份期間數據(ju)的一致性,這里還(huan)用到了一個(ge)概念:寫時(shi)復制COW)。除此之(zhi)外,RDB還(huan)具備(bei)(bei)一下幾(ji)個(ge)特點:
生成一(yi)組持久化文件,每一(yi)個文件都代表(biao)了某一(yi)時刻的內存數據快照(zhao)。
數據恢復速度快。
由(you)于(yu)是由(you)后臺(tai)子(zi)進程(cheng)進行(xing)數(shu)據備份,對(dui)線上系統的QPS影響較小。但如果后臺(tai)需要備份的數(shu)據量較大,則由(you)于(yu)進程(cheng)調度原(yuan)因,可能(neng)會(hui)導致線上業務停滯。
默認每(mei)五(wu)分(fen)鐘生成(cheng)一次數(shu)據副本(ben),數(shu)據的可靠(kao)性并不(bu)高。
AOF則是以追加寫的(de)(de)方式,將(jiang)對(dui)Redis的(de)(de)更新操作全部寫入(ru)aof文件。aof具有以下(xia)特點:
AOF默認(ren)每1s通過(guo)后臺(tai)線程進行一次fsync操作,數據(ju)(ju)的可靠(kao)性比較高,非(fei)常(chang)多丟(diu)失1s的數據(ju)(ju)。
AOF采(cai)用(yong)append-only的(de)方(fang)式(shi)寫入日志(zhi)文件,由于是順序(xu)寫,沒有磁盤尋址的(de)開銷,速(su)度很(hen)快。
AOF日志(zhi)的可讀性很強,可以執行一些緊(jin)急處(chu)理(li)。
但是(shi)AOF日(ri)志(zhi)普遍要(yao)比RDB文(wen)件大,這是(shi)由于(yu)AOF日(ri)志(zhi)需要(yao)記錄redis實(shi)例啟動以來的所有更(geng)新操作,以便對數(shu)據庫進行(xing)重放,恢復(fu)數(shu)據。
由(you)于需要保(bao)證數據的(de)可靠性而每秒執(zhi)行(xing)的(de)fsync操作,會降低(di)線上的(de)QPS。
因此通(tong)過RDB和AOF的(de)(de)配合使用,就可(ke)以在保證(zheng)效率(lv)的(de)(de)同時盡可(ke)能的(de)(de)保證(zheng)數(shu)據的(de)(de)可(ke)靠性。這是(shi)Memory存儲(chu)引(yin)擎所不具備的(de)(de)。
除(chu)此(ci)之(zhi)外,Redis通過nio模型(xing),利(li)用單個線程監聽多個socket,將對redis的操作全部轉換為文件事(shi)件操作。大大提高了并發性(xing)。
延伸閱讀:
二、什么是Memory引擎
Memory引(yin)擎是(shi)Mysql的內存引(yin)擎,在實現上(shang),Memory存儲引(yin)擎不(bu)同于Innodb這種組織索(suo)引(yin)結構(gou)(索(suo)引(yin)即是(shi)數(shu)據,即數(shu)據存放在主鍵索(suo)引(yin)上(shang)),而是(shi)將索(suo)引(yin)和(he)數(shu)據分開存儲。索(suo)引(yin)采用Hash的形(xing)式,存放主鍵id和(he)指向數(shu)據的指針,而數(shu)據則(ze)按插入(ru)順(shun)序存放。我們稱這種數(shu)據組織方(fang)式為堆(dui)組織方(fang)式。