Redis持久化的简单介绍
生活随笔
收集整理的這篇文章主要介紹了
Redis持久化的简单介绍
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Redis的強大功能很大程度上是由于其將所有數據都存儲在內存中,為了使Redis在重啟后仍能保證數據不丟失,需要將數據從內存中以某種形式持久化到硬盤中。
Redis支持兩種方式的持久化,一種是RDB方式,一種是AOF方式。其中,RDB是Redis的默認持久化方式
一、RDB方式
RDB方式是通過快照完成的,當符合一定條件時Redis會自動將內存中的所有數據進行快照并且存儲到硬盤上。
1.RDB的快照同步原理:
1) Redis使用fork函數復制一份當前進程(父進程)的副本(子進程) 2) 父進程繼續接收并處理客戶端發來的命令,而子進程開始將內存中的數據寫入到硬盤中的臨時文件 3) 當子進程寫入完所有數據后會用該臨時文件替換舊的RDB文件2.自動同步
進行快照的條件在配置文件中指定,有2個參數構成:時間和改動的鍵的個數,當在指定時間內被更改的鍵的個數大于指定數值時就會進行快照。默認配置如下:
save 900 1 #900秒內如果超過1個key被修改,則發起快照保存 save 300 10 #300秒內容如超過10個key被修改,則發起快照保存 save 60 10000默認的rdb的文件路徑是在當前目錄,文件名是:dump.rdb,可以在redis.conf配置文件中修改路徑和文件名,分別是dir和dbfilename。
3.手動同步
通過鍵入save/bgsave命令可以手動同步數據到文件中。建議使用bgsave命令,因為save會阻塞二、AOF方式
1.運行原理:
將發送到Redis服務端的每一條命令都記錄下來,并且保存到硬盤中的AOF文件。AOF文件的位置和RDB文件的位置相同,都是通過dir參數設置,默認的文件名是appendonly.aof,可以通過appendfilename參數修改。
文件寫入默認情況下會先寫入到系統的緩存中,系統每30秒同步一次,才是真正的寫入到硬盤。如果在這30秒服務器宕機,那么數據也會丟失的,Redis可以通過配置來修改同步策略。通過fsync函數強制os寫入到磁盤的時機。修改redis.conf文件:
appendonly yes //啟用aof持久化方式 # appendfsync always //每次收到寫命令就立即強制寫入磁盤,最慢的,但是保證完全的持久化,不推薦使用 appendfsync everysec //每秒鐘強制寫入磁盤一次,在性能和持久化方面做了很好的折中,推薦 # appendfsync no //完全依賴os,性能最好,持久化沒保證2.優化命令,精簡文件大小:
鍵入BGREWRITEAOF命令可以重寫AOF文件,使其過濾中間命令。例如: set test 111 set test 222 set test 333 鍵入入BGREWRITEAOF命令后,AOF文件會刪除上邊前2行命令,因為test 的最終值為333,前邊的命令是多余的。3.重寫策略的參數設置:
auto-aof-rewrite-percentage 100 當前的AOF文件大小超過上一次重寫時的AOF文件大小的百分之多少時會再次進行重寫,如果之前沒有重寫過,則以啟動時的AOF文件大小為依據。 auto-aof-rewrite-min-size 64mb 限制了允許重寫的最小AOF文件大小,通常在AOF文件很小的時候即使其中有些冗余的命令也是可以忽略的。AOF優缺點
優點:比快照方式可靠,默認每秒同步一次,意味著最多丟失一秒的數據 缺點:相同數據集大小,AOF文件會比快照文件大轉載于:https://www.cnblogs.com/moonlightL/p/7364617.html
總結
以上是生活随笔為你收集整理的Redis持久化的简单介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Luogu P1031 均分纸牌(贪心
- 下一篇: 梦到开枪打死人是什么征兆