redis的基礎知識咱們已經準備的差很少了,接下來兩篇文章,我想和你們聊聊redis持久化這個話題。html
本文是Redis系列的第八篇文章,瞭解前面的文章有助於更好的理解本文:java
1.Linux上安裝Redis
2.Redis中的五種數據類型簡介
3.Redis字符串(STRING)介紹
4.Redis字符串(STRING)中BIT相關命令
5.Redis列表與集合
6.Redis散列與有序集合
7.Redis中的發佈訂閱和事務 redis
redis持久化
總體上來講,redis持久化有兩種方式,快照持久化和AOF,在項目中咱們能夠根據實際狀況選擇合適的持久化方式,也能夠不用持久化,這關鍵看咱們的redis在項目中扮演了什麼樣的角色。那麼我將分別用兩篇文章來介紹這兩種不一樣的持久化方式,本文咱們先來看看第一種方式。服務器
快照持久化
快照持久化,顧名思義,就是經過拍攝快照的方式實現數據的持久化,redis能夠在某個時間點上對內存中的數據建立一個副本文件,副本文件中的數據在redis重啓時會被自動加載,咱們也能夠將副本文件拷貝到其餘地方同樣能夠使用。微信
如何配置快照持久化
redis中的快照持久化默認是開啓的,redis.conf中相關配置主要有以下幾項:spa
save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes dbfilename dump.rdb dir ./
前面三個save相關的選項表示備份的頻率,分別表示900秒內至少一個鍵被更改則進行快照,300秒內至少10個鍵被更改則進行快照,60秒內至少10000個鍵被更改則進行快照,
stop-writes-on-bgsave-error表示在快照建立出錯後,是否繼續執行寫命令,rdbcompression則表示是否對快照文件進行壓縮,dbfilename表示生成的快照文件的名字,dir則表示生成的快照文件的位置,在redis中,快照持久化默認就是開啓的。咱們能夠經過以下步驟驗證快照持久化的效果:.net
1.進入redis安裝目錄,若是有dump.rdb文件,先將之刪除。以下:code
![p299]()server
2.啓動redis,隨便向redis中存儲幾個數據,而後關閉redis並退出,以下:htm
[root@localhost redis-4.0.8]# redis-server redis.conf [root@localhost redis-4.0.8]# redis-cli 127.0.0.1:6379> set k1 v1 OK 127.0.0.1:6379> set k2 v2 OK 127.0.0.1:6379> SHUTDOWN not connected> exit
3.退出來後,咱們發現剛剛刪掉的dump.rdb文件又回來了,這就是生成的備份文件。
4.此時再次啓動redis並進入,發現剛剛存儲的數據都還在,這是由於redis在啓動時加載了dump.rdb中的數據。好了,關閉redis並退出。
5.將redis目錄下的dump.rdb文件刪除。
6.再次啓動redis並進入到控制檯,全部的數據都不存在了。
快照持久化操做流程
經過上面的介紹,小夥伴們對快照持久化都有一個大體的認識了,那麼這個東西究竟是怎麼運行的?持久化的時機是什麼?咱們來仔細扒一扒。
1.在redis運行過程當中,咱們能夠向redis發送一條save命令來建立一個快照,save是一個阻塞命令,redis在接收到save命令以後,開始執行備份操做以後,在備份操做執行完畢以前,將再也不處理其餘請求,其餘請求將被掛起,所以這個命令咱們用的很少。save命令執行以下:
127.0.0.1:6379> SAVE OK
2.在redis運行過程當中,咱們也能夠發送一條bgsave命令來建立一個快照,不一樣於save命令,bgsave命令會fork一個子進程,而後這個子進程負責執行將快照寫入硬盤,而父進程則繼續處理客戶端發來的請求,這樣就不會致使客戶端命令阻塞了。以下:
127.0.0.1:6379> BGSAVE Background saving started
3.若是咱們在redis.conf中配置了以下選項:
save 900 1 save 300 10 save 60 10000
那麼當條件知足時,好比900秒內有一個key被操做了,那麼redis就會自動觸發bgsava命令進行備份。咱們能夠根據實際需求在redis.conf中配置多個這種觸發規則。
4.還有一種狀況也會觸發save命令,那就是咱們執行shutdown命令時,當咱們用shutdown命令關閉redis時,此時也會執行一個save命令進行備份操做,並在備份操做完成後將服務器關閉。
5.還有一種特殊狀況也會觸發bgsave命令,就是在主從備份的時候。當從機鏈接上主機後,會發送一條sync命令來開始一次複製操做,此時主機會開始一次bgsave操做,並在bgsave操做結束後向從機發送快照數據實現數據同步。
快照持久化的缺點
快照持久化有一些缺點,好比save命令會發生阻塞,bgsave雖然不會發生阻塞,可是fork一個子進程又要耗費資源,在一些極端狀況下,fork子進程的時間甚至超過數據備份的時間。按期的持久化也會讓咱們存在數據丟失的風險,最壞的狀況咱們可能丟失掉最近一次備份到當下的數據,具體丟失多久的數據,要看咱們項目的承受能力,咱們能夠根據項目的承受能力配飾save參數。
OK,快照持久化咱們就介紹這麼多,更多資料小夥伴們能夠參考官方文檔http://www.redis.net.cn/tutorial/3501.html。小夥伴在看官方文檔時,有什麼問題歡迎留言討論。
更多資料請關注公衆號:
本文分享自微信公衆號 - 江南一點雨(a_javaboy)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。