91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

redis中的快照持久化是什么

發布時間:2020-07-01 14:32:31 來源:億速云 閱讀:264 作者:元一 欄目:關系型數據庫

redis中的快照持久化是什么?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

Redis為了內部數據的安全考慮,會把本身的數據以文件形式保存到硬盤中一份,在服務器重啟之后會自動把硬盤的數據恢復到內存(redis)的里邊,數據保存到硬盤的過程就稱為“持久化”效果。

快照持久化

將某一時刻的所有數據寫入硬盤。使用BGSAVE命令,隨著內存使用量的增加,執行 BGSAVE 可能會導致系統長時間地停頓。

快照原理

我們知道 Redis 是單線程程序,這個線程要同時負責多個客戶端套接字的并發讀寫操作 和內存數據結構的邏輯讀寫。

在服務線上請求的同時,Redis 還需要進行內存快照,內存快照要求 Redis 必須進行文 件 IO 操作,可文件 IO 操作是不能使用多路復用 API。

這意味著單線程同時在服務線上的請求還要進行文件 IO 操作,文件 IO 操作會嚴重拖 垮服務器請求的性能。還有個重要的問題是為了不阻塞線上的業務,就需要邊持久化邊響應 客戶端請求。持久化的同時,內存數據結構還在改變,比如一個大型的 hash 字典正在持久 化,結果一個請求過來把它給刪掉了,還沒持久化完呢,這尼瑪要怎么搞?

那該怎么辦呢?

Redis 使用操作系統的多進程 COW(Copy On Write) 機制來實現快照持久化,這個機制 很有意思,也很少人知道。多進程 COW 也是鑒定程序員知識廣度的一個重要指標。

fork(多進程)

Redis 在持久化時會調用 glibc 的函數 fork 產生一個子進程,快照持久化完全交給子進 程來處理,父進程繼續處理客戶端請求。子進程剛剛產生時,它和父進程共享內存里面的代 碼段和數據段。這時你可以將父子進程想像成一個連體嬰兒,共享身體。這是 Linux 操作系統的機制,為了節約內存資源,所以盡可能讓它們共享起來。在進程分離的一瞬間,內存的增長幾乎沒有明顯變化。子進程做數據持久化,它不會修改現有的內存數據結構,它只是對數據結構進行遍歷讀取,然后序列化寫到磁盤中。但是父進程不一樣,它必須持續服務客戶端請求,然后對內存數據結構進行不間斷的修改。這個時候就會使用操作系統的 COW 機制來進行數據段頁面的分離。數據段是由很多操 作系統的頁面組合而成,當父進程對其中一個頁面的數據進行修改時,會將被共享的頁面復 制一份分離出來,然后對這個復制的頁面進行修改。這時子進程相應的頁面是沒有變化的, 還是進程產生時那一瞬間的數據。

隨著父進程修改操作的持續進行,越來越多的共享頁面被分離出來,內存就會持續增 長。但是也不會超過原有數據內存的 2 倍大小。另外一個 Redis 實例里冷數據占的比例往 往是比較高的,所以很少會出現所有的頁面都會被分離,被分離的往往只有其中一部分頁 面。每個頁面的大小只有 4K,一個 Redis 實例里面一般都會有成千上萬的頁面。

子進程因為數據沒有變化,它能看到的內存里的數據在進程產生的一瞬間就凝固了,再 也不會改變,這也是為什么 Redis 的持久化叫「快照」的原因。接下來子進程就可以非常安 心的遍歷數據了進行序列化寫磁盤了。

關于redis中的快照持久化是什么問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

西乌珠穆沁旗| 巧家县| 台东市| 沈丘县| 靖西县| 巴林右旗| 合肥市| 台安县| 桃源县| 新竹县| 鹤峰县| 景洪市| 和田县| 左权县| 五莲县| 玉林市| 剑阁县| 三江| 句容市| 镇江市| 怀来县| 阿拉善左旗| 金华市| 金山区| 河西区| 天津市| 郁南县| 孝感市| 通化县| 米易县| 商丘市| 永吉县| 醴陵市| 滦南县| 云龙县| 敦化市| 隆林| 茂名市| 尼玛县| 天津市| 乌拉特中旗|