日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 知識百科

十分鐘徹底理解 Redis 的持久化和主從復制

來源: 責編: 時間:2023-08-07 16:29:58 260觀看
導讀 什么是Redis持久化?Redis作為一個鍵值對內存數據庫(NoSQL),數據都存儲在內存當中,在處理客戶端請求時,所有操作都在內存當中進行,如下所示:這樣做有什么問題呢?其實,只要稍微有點計

什么是Redis持久化?JZn28資訊網——每日最新資訊28at.com

Redis作為一個鍵值對內存數據庫(NoSQL),數據都存儲在內存當中,在處理客戶端請求時,所有操作都在內存當中進行,如下所示:JZn28資訊網——每日最新資訊28at.com

JZn28資訊網——每日最新資訊28at.com

這樣做有什么問題呢?JZn28資訊網——每日最新資訊28at.com

其實,只要稍微有點計算機基礎知識的人都知道,存儲在內存當中的數據,只要服務器關機(各種原因引起的),內存中的數據就會消失了,不僅服務器關機會造成數據消失,Redis服務器守護進程退出,內存中的數據也一樣會消失。JZn28資訊網——每日最新資訊28at.com

JZn28資訊網——每日最新資訊28at.com

對于只把Redis當緩存來用的項目來說,數據消失或許問題不大,重新從數據源把數據加載進來就可以了,但如果直接把用戶提交的業務數據存儲在Redis當中,把Redis作為數據庫來使用,在其放存儲重要業務數據,那么Redis的內存數據丟失所造成的影響也許是毀滅性。為了避免內存中數據丟失,Redis提供了對持久化的支持,我們可以選擇不同的方式將數據從內存中保存到硬盤當中,使數據可以持久化保存。JZn28資訊網——每日最新資訊28at.com

JZn28資訊網——每日最新資訊28at.com

Redis提供了RDB和AOF兩種不同的數據持久化方式,下面我們就來詳細介紹一下這種不同的持久化方式吧。JZn28資訊網——每日最新資訊28at.com

RDBJZn28資訊網——每日最新資訊28at.com

RDB是一種快照存儲持久化方式,具體就是將Redis某一時刻的內存數據保存到硬盤的文件當中,默認保存的文件名為dump.rdb,而在Redis服務器啟動時,會重新加載dump.rdb文件的數據到內存當中恢復數據。JZn28資訊網——每日最新資訊28at.com

開啟RDB持久化方式JZn28資訊網——每日最新資訊28at.com

開啟RDB持久化方式很簡單,客戶端可以通過向Redis服務器發送save或bgsave命令讓服務器生成rdb文件,或者通過服務器配置文件指定觸發RDB條件。JZn28資訊網——每日最新資訊28at.com

1. save命令JZn28資訊網——每日最新資訊28at.com

save命令是一個同步操作。JZn28資訊網——每日最新資訊28at.com

# 同步數據到磁盤上JZn28資訊網——每日最新資訊28at.com
> saveJZn28資訊網——每日最新資訊28at.com

JZn28資訊網——每日最新資訊28at.com

當客戶端向服務器發送save命令請求進行持久化時,服務器會阻塞save命令之后的其他客戶端的請求,直到數據同步完成。JZn28資訊網——每日最新資訊28at.com

如果數據量太大,同步數據會執行很久,而這期間Redis服務器也無法接收其他請求,所以,最好不要在生產環境使用save命令。JZn28資訊網——每日最新資訊28at.com

2. bgsaveJZn28資訊網——每日最新資訊28at.com

與save命令不同,bgsave命令是一個異步操作。JZn28資訊網——每日最新資訊28at.com

# 異步保存數據集到磁盤上JZn28資訊網——每日最新資訊28at.com
> bgsaveJZn28資訊網——每日最新資訊28at.com

JZn28資訊網——每日最新資訊28at.com

當客戶端發服務發出bgsave命令時,Redis服務器主進程會forks一個子進程來數據同步問題,在將數據保存到rdb文件之后,子進程會退出。JZn28資訊網——每日最新資訊28at.com

所以,與save命令相比,Redis服務器在處理bgsave采用子線程進行IO寫入,而主進程仍然可以接收其他請求,但forks子進程是同步的,所以forks子進程時,一樣不能接收其他請求,這意味著,如果forks一個子進程花費的時間太久(一般是很快的),bgsave命令仍然有阻塞其他客戶的請求的情況發生。JZn28資訊網——每日最新資訊28at.com

3. 服務器配置自動觸發JZn28資訊網——每日最新資訊28at.com

除了通過客戶端發送命令外,還有一種方式,就是在Redis配置文件中的save指定到達觸發RDB持久化的條件,比如【多少秒內至少達到多少寫操作】就開啟RDB數據同步。JZn28資訊網——每日最新資訊28at.com

例如我們可以在配置文件redis.conf指定如下的選項:JZn28資訊網——每日最新資訊28at.com

# 900s內至少達到一條寫命令JZn28資訊網——每日最新資訊28at.com
save 900 1JZn28資訊網——每日最新資訊28at.com
# 300s內至少達至10條寫命令JZn28資訊網——每日最新資訊28at.com
save 300 10JZn28資訊網——每日最新資訊28at.com
# 60s內至少達到10000條寫命令JZn28資訊網——每日最新資訊28at.com
save 60 10000JZn28資訊網——每日最新資訊28at.com

之后在啟動服務器時加載配置文件。JZn28資訊網——每日最新資訊28at.com

# 啟動服務器加載配置文件JZn28資訊網——每日最新資訊28at.com
redis-server redis.confJZn28資訊網——每日最新資訊28at.com

這種通過服務器配置文件觸發RDB的方式,與bgsave命令類似,達到觸發條件時,會forks一個子進程進行數據同步,不過最好不要通過這方式來觸發RDB持久化,因為設置觸發的時間太短,則容易頻繁寫入rdb文件,影響服務器性能,時間設置太長則會造成數據丟失。JZn28資訊網——每日最新資訊28at.com

rdb文件JZn28資訊網——每日最新資訊28at.com

前面介紹了三種讓服務器生成rdb文件的方式,無論是由主進程生成還是子進程來生成,其過程如下:JZn28資訊網——每日最新資訊28at.com

生成臨時rdb文件,并寫入數據。完成數據寫入,用臨時文代替代正式rdb文件。刪除原來的db文件。JZn28資訊網——每日最新資訊28at.com

RDB默認生成的文件名為dump.rdb,當然,我可以通過配置文件進行更加詳細配置,比如在單機下啟動多個redis服務器進程時,可以通過端口號配置不同的rdb名稱,如下所示:JZn28資訊網——每日最新資訊28at.com

# 是否壓縮rdb文件JZn28資訊網——每日最新資訊28at.com
rdbcompression yesJZn28資訊網——每日最新資訊28at.com
JZn28資訊網——每日最新資訊28at.com
# rdb文件的名稱JZn28資訊網——每日最新資訊28at.com
dbfilename redis-6379.rdbJZn28資訊網——每日最新資訊28at.com
JZn28資訊網——每日最新資訊28at.com
# rdb文件保存目錄JZn28資訊網——每日最新資訊28at.com
dir ~/redis/JZn28資訊網——每日最新資訊28at.com
RDB的幾個優點與AOF方式相比,通過rdb文件恢復數據比較快。rdb文件非常緊湊,適合于數據備份。通過RDB進行數據備,由于使用子進程生成,所以對Redis服務器性能影響較小。RDB的幾個缺點如果服務器宕機的話,采用RDB的方式會造成某個時段內數據的丟失,比如我們設置10分鐘同步一次或5分鐘達到1000次寫入就同步一次,那么如果還沒達到觸發條件服務器就死機了,那么這個時間段的數據會丟失。使用save命令會造成服務器阻塞,直接數據同步完成才能接收后續請求。使用bgsave命令在forks子進程時,如果數據量太大,forks的過程也會發生阻塞,另外,forks子進程會耗費內存。AOFJZn28資訊網——每日最新資訊28at.com

聊完了RDB,來聊聊Redis的另外一個持久化方式:AOF(Append-only file)。與RDB存儲某個時刻的快照不同,AOF持久化方式會記錄客戶端對服務器的每一次寫操作命令,并將這些寫操作以Redis協議追加保存到以后綴為aof文件末尾,在Redis服務器重啟時,會加載并運行aof文件的命令,以達到恢復數據的目的。JZn28資訊網——每日最新資訊28at.com

JZn28資訊網——每日最新資訊28at.com

開啟AOF持久化方式JZn28資訊網——每日最新資訊28at.com

Redis默認不開啟AOF持久化方式,我們可以在配置文件中開啟并進行更加詳細的配置,如下面的redis.conf文件:JZn28資訊網——每日最新資訊28at.com

# 開啟aof機制JZn28資訊網——每日最新資訊28at.com
appendonly yesJZn28資訊網——每日最新資訊28at.com
JZn28資訊網——每日最新資訊28at.com
# aof文件名JZn28資訊網——每日最新資訊28at.com
appendfilename "appendonly.aof"JZn28資訊網——每日最新資訊28at.com
JZn28資訊網——每日最新資訊28at.com
# 寫入策略,always表示每個寫操作都保存到aof文件中,也可以是everysec或noJZn28資訊網——每日最新資訊28at.com
appendfsync alwaysJZn28資訊網——每日最新資訊28at.com
JZn28資訊網——每日最新資訊28at.com
# 默認不重寫aof文件JZn28資訊網——每日最新資訊28at.com
no-appendfsync-on-rewrite noJZn28資訊網——每日最新資訊28at.com
JZn28資訊網——每日最新資訊28at.com
# 保存目錄JZn28資訊網——每日最新資訊28at.com
dir ~/redis/JZn28資訊網——每日最新資訊28at.com
三種寫入策略JZn28資訊網——每日最新資訊28at.com

在上面的配置文件中,我們可以通過appendfsync選項指定寫入策略,有三個選項。JZn28資訊網——每日最新資訊28at.com

appendfsync alwaysJZn28資訊網——每日最新資訊28at.com
# appendfsync everysecJZn28資訊網——每日最新資訊28at.com
# appendfsync noJZn28資訊網——每日最新資訊28at.com
1. alwaysJZn28資訊網——每日最新資訊28at.com

客戶端的每一個寫操作都保存到aof文件當,這種策略很安全,但是每個寫請注都有IO操作,所以也很慢。JZn28資訊網——每日最新資訊28at.com

2. everysecJZn28資訊網——每日最新資訊28at.com

appendfsync的默認寫入策略,每秒寫入一次aof文件,因此,最多可能會丟失1s的數據。JZn28資訊網——每日最新資訊28at.com

3. noJZn28資訊網——每日最新資訊28at.com

Redis服務器不負責寫入aof,而是交由操作系統來處理什么時候寫入aof文件。更快,但也是最不安全的選擇,不推薦使用。JZn28資訊網——每日最新資訊28at.com

AOF文件重寫JZn28資訊網——每日最新資訊28at.com

AOF將客戶端的每一個寫操作都追加到aof文件末尾,比如對一個key多次執行incr命令,這時候,aof保存每一次命令到aof文件中,aof文件會變得非常大。JZn28資訊網——每日最新資訊28at.com

incr num 1JZn28資訊網——每日最新資訊28at.com
incr num 2JZn28資訊網——每日最新資訊28at.com
incr num 3JZn28資訊網——每日最新資訊28at.com
incr num 4JZn28資訊網——每日最新資訊28at.com
incr num 5JZn28資訊網——每日最新資訊28at.com
incr num 6JZn28資訊網——每日最新資訊28at.com
...JZn28資訊網——每日最新資訊28at.com
incr num 100000JZn28資訊網——每日最新資訊28at.com

aof文件太大,加載aof文件恢復數據時,就會非常慢,為了解決這個問題,Redis支持aof文件重寫,通過重寫aof,可以生成一個恢復當前數據的最少命令集,比如上面的例子中那么多條命令,可以重寫為:JZn28資訊網——每日最新資訊28at.com

set num 100000JZn28資訊網——每日最新資訊28at.com

aof文件是一個二進制文件,并不是像上面的例子一樣,直接保存每個命令,而使用Redis自己的格式,上面只是方便演示。JZn28資訊網——每日最新資訊28at.com

兩種重寫方式JZn28資訊網——每日最新資訊28at.com

通過在redis.conf配置文件中的選項no-appendfsync-on-rewrite可以設置是否開啟重寫,這種方式會在每次fsync時都重寫,影響服務器性以,因此默認值為no,不推薦使用。JZn28資訊網——每日最新資訊28at.com

# 默認不重寫aof文件JZn28資訊網——每日最新資訊28at.com
no-appendfsync-on-rewrite noJZn28資訊網——每日最新資訊28at.com

客戶端向服務器發送bgrewriteaof命令,也可以讓服務器進行AOF重寫。JZn28資訊網——每日最新資訊28at.com

# 讓服務器異步重寫追加aof文件命令JZn28資訊網——每日最新資訊28at.com
> bgrewriteaofJZn28資訊網——每日最新資訊28at.com

JZn28資訊網——每日最新資訊28at.com

重寫aof文件的好處壓縮aof文件,減少磁盤占用量。將aof的命令壓縮為最小命令集,加快了數據恢復的速度。AOF文件損壞JZn28資訊網——每日最新資訊28at.com

在寫入aof日志文件時,如果Redis服務器宕機,則aof日志文件文件會出格式錯誤,在重啟Redis服務器時,Redis服務器會拒絕載入這個aof文件,可以通過以下步驟修復aof并恢復數據。JZn28資訊網——每日最新資訊28at.com

備份現在aof文件,以防萬一。使用redis-check-aof命令修復aof文件,該命令格式如下:# 修復aof日志文件JZn28資訊網——每日最新資訊28at.com
$ redis-check-aof -fix file.aofJZn28資訊網——每日最新資訊28at.com
重啟Redis服務器,加載已經修復的aof文件,恢復數據。AOF的優點JZn28資訊網——每日最新資訊28at.com

AOF只是追加日志文件,因此對服務器性能影響較小,速度比RDB要快,消耗的內存較少。JZn28資訊網——每日最新資訊28at.com

AOF的缺點AOF方式生成的日志文件太大,即使通過AFO重寫,文件體積仍然很大?;謴蛿祿乃俣缺萊DB慢。選擇RDB還是AOF呢?JZn28資訊網——每日最新資訊28at.com

通過上面的介紹,我們了解了RDB與AOF各自的優點與缺點,到底要如何選擇呢?JZn28資訊網——每日最新資訊28at.com

通過下面的表示,我們可以從幾個方面對比一下RDB與AOF,在應用時,要根本自己的實際需求,選擇RDB或者AOF,其實,如果想要數據足夠安全,可以兩種方式都開啟,但兩種持久化方式同時進行IO操作,會嚴重影響服務器性能,因此有時候不得不做出選擇。JZn28資訊網——每日最新資訊28at.com

JZn28資訊網——每日最新資訊28at.com

當RDB與AOF兩種方式都開啟時,Redis會優先使用AOF日志來恢復數據,因為AOF保存的文件比RDB文件更完整。JZn28資訊網——每日最新資訊28at.com

小結JZn28資訊網——每日最新資訊28at.com

上面講了一大堆Redis的持久化機制的知識,其實,如果你只是單純把Redis作為緩存服務器,那么可以完全不用考慮持久化,但是,在如今的大多數服務器架構中,Redis的單單只是扮演一個緩存服務器的角色,還可以作為數據庫,保存我們的業務數據,此時,我們則需要好好了解有關Redis持久化策略的區別與選擇。JZn28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-119-2191-0.html十分鐘徹底理解 Redis 的持久化和主從復制

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 將點云與RGB圖像結合,谷歌&Waymo提出的4D-Net,檢測遠距離目標

下一篇: 云計算開發:Python3-List count()方法詳解

標簽:
  • 熱門焦點
  • 直屏旗艦來了 iQOO 12和K70 Pro同臺競技

    旗艦機基本上使用的都是雙曲面屏幕,這就讓很多喜歡直屏的愛好者在苦等一款直屏旗艦,這次,你們等到了。據博主數碼閑聊站帶來的最新爆料稱,Redmi下代旗艦K70 Pro和iQOO 12兩款手
  • 服務存儲設計模式:Cache-Aside模式

    Cache-Aside模式一種常用的緩存方式,通常是把數據從主存儲加載到KV緩存中,加速后續的訪問。在存在重復度的場景,Cache-Aside可以提升服務性能,降低底層存儲的壓力,缺點是緩存和底
  • 使用Webdriver-manager解決瀏覽器與驅動不匹配所帶來自動化無法執行的問題

    1、前言在我們使用 Selenium 進行 UI 自動化測試時,常常會因為瀏覽器驅動與瀏覽器版本不匹配,而導致自動化測試無法執行,需要手動去下載對應的驅動版本,并替換原有的驅動,可能還
  • 為什么你不應該使用Div作為可點擊元素

    按鈕是為任何網絡應用程序提供交互性的最常見方式。但我們經常傾向于使用其他HTML元素,如 div span 等作為 clickable 元素。但通過這樣做,我們錯過了許多內置瀏覽器的功能。
  • 中國家電海外掘金正當時|出海專題

    作者|吳南南編輯|胡展嘉運營|陳佳慧出品|零態LT(ID:LingTai_LT)2023年,出海市場戰況空前,中國創業者在海外紛紛摩拳擦掌,以期能夠把中國的商業模式、創業理念、戰略打法輸出海外,他們依
  • 年輕人的“職場羞恥感”,無處不在

    作者:馮曉亭 陶 淘 李 欣 張 琳 馬舒葉來源:燃次元“人在職場,應該選擇什么樣的著裝?”近日,在網絡上,一個與著裝相關的帖子引發關注,在該帖子里,一位在高級寫字樓亞洲金
  • 8月見!小米MIX Fold 3獲得3C認證:支持67W快充

    這段時間以來,包括三星、一加、榮耀等等有不少品牌旗下的最新折疊屏旗艦都得到了不少爆料,而小米新一代折疊屏旗艦——小米MIX Fold 3此前也屢屢被傳
  • OPPO K11樣張首曝:千元機影像“卷”得真不錯!

    一直以來,OPPO K系列機型都保持著較為均衡的產品體驗,歷來都是2K價位的明星機型,去年推出的OPPO K10和OPPO K10 Pro兩款機型憑借各自的出色配置,堪稱有
  • 外交部:美方應停止在網絡安全問題上不負責任地指責他國

      中國外交部今天(16日)舉行例行記者會。會上,有記者問,美國情報官員稱,他們正在阻攔來自中國以及其他國家的黑客獲取相關科研成果。 中方對此有何評論?對此
Top 主站蜘蛛池模板: 邛崃市| 宁明县| 昭平县| 诸城市| 屏东县| 偏关县| 苗栗县| 宁强县| 静海县| 吉林省| 喀喇| 中西区| 保康县| 淮南市| 牙克石市| 离岛区| 丹东市| 昔阳县| 德格县| 仙居县| 子洲县| 青海省| 阜平县| 余干县| 江永县| 沙田区| 额敏县| 高清| 平乡县| 镇沅| 岳普湖县| 长垣县| 上栗县| 江阴市| 巴彦淖尔市| 新营市| 武威市| 资源县| 靖宇县| 区。| 大同县|