您好,登錄后才能下訂單哦!
redis和memcache的區(qū)別是什么?
? ? 簡單來說,如果沒有持久化的redis,就和memcache一樣了,相當(dāng)于一個(gè)緩存數(shù)據(jù)庫。
redis是如何解決數(shù)據(jù)持久化的?
????redis有兩種持久化方案:RDB(Redis DataBases)和AOF(AppendOnly File)
RDB持久化(詳細(xì)分析:https://blog.51cto.com/13690439/2118462)
? ? RDB是snapshot快照<二進(jìn)制文件>存儲(chǔ),是默認(rèn)的持久化方式。
? ? RDB會(huì)按照一定的策略,周期性的將數(shù)據(jù)保存到磁盤。(下個(gè)周期為到來時(shí)故障,會(huì)丟數(shù)據(jù))
? ? 借助fork命令的copy on write機(jī)制,在快照生成時(shí),將當(dāng)前進(jìn)程fork出一個(gè)子進(jìn)程,
? ? 然后再子進(jìn)程中循環(huán)所有數(shù)據(jù),將數(shù)據(jù)寫成RDB文件。
AOF持久化(詳細(xì)分析:https://blog.51cto.com/13690439/2118465)
? ? AOF<二進(jìn)制文件>比RDB方式有更好的持久性。
? ? redis會(huì)將每一個(gè)收到的寫命令都通過write函數(shù)追加到文件最后,類似msyql的binlog。
? ? 當(dāng)redis重啟時(shí),會(huì)通過重新執(zhí)行文件中保存的寫命令來在內(nèi)存中重建整個(gè)數(shù)據(jù)庫的內(nèi)容。
簡單來說:
????RDB:是按照策略周期性的進(jìn)行持久化數(shù)據(jù);
? ? AOF:是不斷的去記錄修改操作;
持久化方式的選擇:
? ? RDB和AOF操作都是順序IO操作,性能都很高。
? ? 而同時(shí)在通過RDB文件或者AOF日志進(jìn)行數(shù)據(jù)庫恢復(fù)的時(shí)候,也是順序的讀取數(shù)據(jù)加載到內(nèi)存中。
? ? 所以也不會(huì)造成磁盤的隨機(jī)讀。
? ? 通常,如果你要想提供很高的數(shù)據(jù)保障性,那么建議你同時(shí)使用兩種持久化方式。
? ? 如果你可以接受災(zāi)難帶來的幾分鐘的數(shù)據(jù)丟失,那么你可以僅使用RDB。
在數(shù)據(jù)恢復(fù)方面:
? ? RDB的啟動(dòng)時(shí)間會(huì)更短,原因有兩個(gè):
? ? ? ? 1、RDB文件中每一條數(shù)據(jù)只有一條記錄,不會(huì)像AOF日志那樣可能有一條數(shù)據(jù)的多次操作記錄。
? ? ? ? ? ? ?所以每條數(shù)據(jù)只需要寫一次就行了。
? ? ? ? 2、RDB文件的存儲(chǔ)格式和Redis數(shù)據(jù)在內(nèi)存中的編碼格式是一致的,不需要再進(jìn)行數(shù)據(jù)編碼工作,
? ? ? ? ? ? ?所以在CPU消耗上要遠(yuǎn)小于AOF日志的加載。?
市場常見架構(gòu):
? ? ? 目前,通常的設(shè)計(jì)思路是利用Replication機(jī)制來彌補(bǔ)aof、snapshot性能上的不足,達(dá)到了數(shù)據(jù)可持久化。
? ? ? 即Master上Snapshot和AOF都不做,來保證Master的讀寫性能,
? ? ? 而Slave上則同時(shí)開啟Snapshot和AOF來進(jìn)行持久化,保證數(shù)據(jù)的安全性。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。