Redis实战(五):Redis的持久化RDB、fork、copyonwrite、AOF、RDBAOF混合使用
生活随笔
收集整理的這篇文章主要介紹了
Redis实战(五):Redis的持久化RDB、fork、copyonwrite、AOF、RDBAOF混合使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
補充一個知識
緩存:數據可以丟,保證速度。
數據庫:數據是絕對不能丟的,保證速度+持久性,內存中的數據是掉電易失的。
存儲層:
- 快照/副本
- 日志文件
$$優先級高于管道
fork()
fork是系統調用,copy on write是內核機制。
寫時復制
在fork子進程的時候,只拷貝指針,并不發生內存的復制。
只有當其中的某一個進程試圖對該區域進行寫操作時,內核就會在物理存儲器中為子進程開辟一個新的物理頁面,將需要寫的區域將父進程的內容復制一份給子進程,然后對新的物理頁面進行寫操作。
這時就是實現了對不同進程的操作而不會產生影響其他的進程,同時也節省了很多的物理存儲器。
并且根據經驗來看,不可能父子進程將所有數據都改一遍。下圖redis也用了這個機制,而且redis的子進程不會去修改數據:
- 可以用ref記錄被引用的數量
redis 子進程用來RDB持久化落盤,父進程用來提供服務:
RDB:快照,副本
時點性,是每隔一段時間存一下
- 阻塞,redis不對外提供服務
AOF:追加日志 append only file
redis的寫操作記錄到文件中,類似于mysql的binlog
- 非阻塞,redis繼續對外提供服務
- 同時數據能夠落地
- RDB和AOF可以同時開啟。如果開啟了AOF,重啟服務器的時候,只會用AOF恢復。
- 4.0版本之后,AOF中包含RDB全量,增加記錄新的寫操作。
RDB的改進
總結
以上是生活随笔為你收集整理的Redis实战(五):Redis的持久化RDB、fork、copyonwrite、AOF、RDBAOF混合使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多线程与高并发(六):线程池可用的各种高
- 下一篇: MySQL调优(五):MySQL查询优化