Redis實(shí)現(xiàn)持久化的方式匯總
Redis有3種實(shí)現(xiàn)持久化的方式:AOF日志、RDB快照、混合持久化
Redis寫入AOF日志的過(guò)程
Redis執(zhí)行完寫操作命令后,將命令追加到server.aof_buf緩沖區(qū)
通過(guò)write()系統(tǒng)調(diào)用,將aof_buf緩沖區(qū)的數(shù)據(jù)寫入到AOF文件
數(shù)據(jù)被拷貝到了內(nèi)核緩沖區(qū)page cache
由內(nèi)核決定何時(shí)將數(shù)據(jù)寫入硬盤
Redis實(shí)現(xiàn)RDB快照
生成 RDB 文件的兩個(gè)命令:save 和 bgsave
執(zhí)行save命令會(huì)在主線程生成RDB文件,執(zhí)行bgsave命令會(huì)創(chuàng)建一個(gè)子進(jìn)程來(lái)生成RDB文件
執(zhí)行bgsave命令時(shí),會(huì)通過(guò)fork()創(chuàng)建子進(jìn)程,子進(jìn)程和父進(jìn)程共享同一片內(nèi)存數(shù)據(jù)。因?yàn)閯?chuàng)建子進(jìn)程的時(shí)候,子進(jìn)程復(fù)制父進(jìn)程的頁(yè)表,但頁(yè)表指向的物理內(nèi)存還是一個(gè)。如果主線程執(zhí)行讀操作,則主線程和 bgsave 進(jìn)程互不影響;如果主線程執(zhí)行寫操作,則被修改的數(shù)據(jù)會(huì)復(fù)制一份副本,然后 bgsave 子進(jìn)程會(huì)把該副本數(shù)據(jù)寫入 RDB 文件,在這個(gè)過(guò)程中,主線程仍然可以直接修改原來(lái)的數(shù)據(jù)
混合持久化
在AOF日志重寫過(guò)程,當(dāng)開(kāi)啟了混合持久化時(shí),在AOF重寫日志時(shí),fork出來(lái)的重寫子進(jìn)程會(huì)先將與主線程共享的內(nèi)存數(shù)據(jù)以RDB方式寫到AOF文件,然后主線程處理的操作命令會(huì)被記錄在重寫緩沖區(qū),重寫緩沖區(qū)里的增量命令會(huì)以AOF方式寫入到AOF文件,寫入完成后通知主進(jìn)程將含有的RDB格式和AOF格式的AOF文件替換舊版。
到此這篇關(guān)于Redis實(shí)現(xiàn)持久化的方式匯總的文章就介紹到這了,更多相關(guān)Redis實(shí)現(xiàn)持久化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Redis調(diào)用Lua腳本及使用場(chǎng)景快速掌握
Redis?是一種非常流行的內(nèi)存數(shù)據(jù)庫(kù),常用于數(shù)據(jù)緩存與高頻數(shù)據(jù)存儲(chǔ)。大多數(shù)開(kāi)發(fā)人員可能聽(tīng)說(shuō)過(guò)redis可以運(yùn)行?Lua?腳本,但是可能不知道redis在什么情況下需要使用到Lua腳本2022-03-03redis.conf中使用requirepass不生效的原因及解決方法
本文主要介紹了如何啟用requirepass,以及啟用requirepass為什么不會(huì)生效,從代碼層面分析了不生效的原因,以及解決方法,需要的朋友可以參考下2023-07-07redis持久化AOF和RDB的區(qū)別及解決各個(gè)場(chǎng)景問(wèn)題示例
這篇文章主要為大家介紹了redis持久化AOF和RDB的區(qū)別及解決各個(gè)場(chǎng)景問(wèn)題示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08Redis在項(xiàng)目中常見(jiàn)的12種使用場(chǎng)景示例和說(shuō)明
Redis是一個(gè)開(kāi)源的高性能鍵值對(duì)數(shù)據(jù)庫(kù),它以其內(nèi)存中數(shù)據(jù)存儲(chǔ)、鍵過(guò)期策略、持久化、事務(wù)、豐富的數(shù)據(jù)類型支持以及原子操作等特性,在許多項(xiàng)目中扮演著關(guān)鍵角色,以下是整理的12個(gè)Redis在項(xiàng)目中常見(jiàn)的使用場(chǎng)景舉例說(shuō)明和解釋2024-06-06淺析Redis Sentinel 與 Redis Cluster
本文主要介紹Redis Sentinel 及 Redis Cluster的區(qū)別及用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-06-06幾分鐘教你掌握Redis簡(jiǎn)單動(dòng)態(tài)字符串SDS
這篇文章主要為大家介紹了幾分鐘教你掌握Redis簡(jiǎn)單動(dòng)態(tài)字符串SDS方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01Redis的數(shù)據(jù)類型和內(nèi)部編碼詳解
Redis是通過(guò)Key-Value的形式來(lái)組織數(shù)據(jù)的,而Key的類型都是String,而Value的類型可以有很多,在Redis中最通用的數(shù)據(jù)類型大致有這幾種:String、List、Set、Hash、Sorted Set,下面通過(guò)本文介紹Redis數(shù)據(jù)類型和內(nèi)部編碼,感興趣的朋友一起看看吧2024-04-04