日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

分布式内存数据库---Redis的持久化

發布時間:2024/10/8 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 分布式内存数据库---Redis的持久化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、 Redis 提供了不同級別的持久化方式:

Redis提供了兩種方式對數據進行持久化,分別是RDB和AOF。
RDB持久化方式能夠在指定的時間間隔能對你的數據進行快照存儲。
AOF持久化方式記錄每次對服務器寫的操作,當服務器重啟的時候會重新執行這些命令來恢復原始的數據,AOF命令以redis協議追加保存每次寫的操作到文件末尾。Redis還能對AOF文件進行后臺重寫,使得AOF文件的體積不至于過大。
如果你只希望你的數據在服務器運行的時候存在,你也可以不使用任何持久化方式。
你也可以同時開啟兩種持久化方式,,在這種情況下,當redis重啟的時候會優先載入AOF文件來恢復原始的數據,因為在通常情況下AOF文件保存的數據集要比RDB文件保存的數據集要完整。

二、 配置文件中對兩種存儲方式的設置

Redis默認開啟RDB的存儲方式。
The filename where to dump the DB
dbfilename “dump.rdb”
對于AOF的存儲方式redis并沒有默認開啟。通過配置開啟如下:

把注釋去掉就開啟了AOF的存儲方式。

三、 RDB(Redis DataBase)介紹

開啟RDB方式redis會在指定的時間段內將內存中的數據快照到磁盤中,redis啟動時再恢復到內存中。
Redis會單獨創建(fork)一個線程,將數據寫入到臨時文件中,持久化的過程都結束了,在用這個臨時文件替換上次的臨時文件。
如果需要進行大規模的數據恢復,并且對于數據恢復不是很敏感,RDB的方式比AOF方式更加高效,RDB的缺點就在于最后一次持久化后的數據有可能會丟失。
RDB持久化數據觸發配置在redis.conf中:

默認是當一條數據寫入時15分鐘持久化一次,當10條數據發生變化5分鐘(為了測試方便改成了2分鐘)持久化一次,當10000條數據發生變化1分鐘進行持久化。
RDB存儲方式測試:

兩分鐘后在文件夾中生成了一個dump.rdb的文件,這個就是臨時文件,保存該臨時文件。

再次清空數據庫:

然后刪除dum.rdb文件,將dump.rdb.bk文件恢復成dump.rdb。再啟動服務器。

如上圖所示,redis中的數據已經從dump.rdb中恢復過來了。

四、 AOF(APPEND ONLY FILE)存儲介紹

以日志的形式來記錄每個寫操作,將Redis執行過的所有寫指令記錄下來(讀操作不記錄),
只許追加文件但不可以改寫文件,redis啟動之初會讀取該文件重新構建數據,換言之,redis
重啟的話就根據日志文件的內容將寫指令從前到后執行一次以完成數據的恢復工作。
注:所有的指令記錄也包括flushDB操作,后面會有坑。
在redis中這種存儲方式默認是關閉的,需要在redis.conf文件中開啟,開啟方式在文中已經做了介紹,就不在贅述。
Redis對于AOF存儲方式是怎么持久化的在redis.conf也有,如下:

配置文件對于這種方式的持久化有三種方式:
1、 有寫操作就寫。顯然這種方式影響性能。但是數據完整,不會丟數據
2、 不開啟。不開啟AOF就沒意思了
3、 每秒寫文件。折中的方式更加合適。但是有可能導致一秒的數據丟失。

AOF的重寫(Rewrite)

AOF采用文件追加方式,文件會越來越大為避免出現此種情況,新增了重寫機制,
當AOF文件的大小超過所設定的閾值時,Redis就會啟動AOF文件的內容壓縮。

重寫原理

AOF文件持續增長而過大時,會fork出一條新進程來將文件重寫(也是先寫臨時文件最后再rename),遍歷新進程的內存中數據,每條記錄有一條的Set語句。重寫aof文件的操作,并沒有讀取舊的aof文件,而是將整個內存中的數據庫內容用命令的方式重寫了一個新的aof文件,這點和快照有點類似。

觸發機制:

Redis會記錄上次重寫時的AOF大小,默認配置是當AOF文件大小是上次rewrite后大小的一倍且文件大于64M時觸發。

AOF存儲方式優點:

1、 每秒同步。
2、 每修改同步。

AOF存儲方式缺點:

1、 AOF文件遠大于EDB。
2、 運行效率慢。

AOF存儲方式測試:

1、寫入數據

3、 寫入之后在文件夾中出現了AOF文件,再對這個文件進行備份

4、 清空數據庫并退出

5、 恢復appendonly.aof文件

6、 啟動redis服務器,查看數據

如圖所示數據已經恢復。

五、 同時開啟了RDB和AOF兩種方式默認是哪種方式?

從剛才測試AOF可以看出兩種方式同時開啟是使用AOF的存儲方式。

當只開啟了RBD方式時數據庫中有10條數據,當開啟了AOF方式之后,由于appendonly.aof文件中沒有備份數據,所以啟動后如第二個框中框出的所示沒有數據。從這里可以看出默認首先使用AOF的存儲方式。

六、 Redis重寫

AOF是使用文件追加的方式,隨著系統使用的越來越久,AOF的文件會越來越大,當AOF的大小超過文件大小所設定的閾值時,Redis就會啟動AOF文件內容壓縮,只保留可以恢復的最小指令集。
重寫原理:對文件進行壓縮(AOF文件過大時,redis會fork出一條新的進程將文件重寫,遍歷新進程中的內存數據)。
觸發條件:Redis會記錄上次重寫時AOF的大小,默認配置是當AOF文件大小是上次rewrite后大小的一倍,且文件大于64M時觸發,可以在配置文件中修改。

七、 小結

1、 同時開啟兩種方式優先使用AOF方式。
2、 一般來說, 如果想達到足以媲美 PostgreSQL 的數據安全性, 你應該同時使用兩種持久化功能。
3、 如果你非常關心你的數據, 但仍然可以承受數分鐘以內的數據丟失, 那么你可以只使用 RDB 持久化。
4、 有很多用戶都只使用 AOF 持久化, 但我們并不推薦這種方式: 因為定時生成 RDB 快照(snapshot)非常便于進行數據庫備份, 并且 RDB 恢復數據集的速度也要比 AOF 恢復的速度要快, 除此之外, 使用 RDB 還可以避免之前提到的 AOF 程序的 bug 。

總結

以上是生活随笔為你收集整理的分布式内存数据库---Redis的持久化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。