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

溫馨提示×

溫馨提示×

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

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

Redis持久化實現的方法是什么

發布時間:2021-12-27 17:38:42 來源:億速云 閱讀:129 作者:iii 欄目:大數據

這篇文章主要介紹“Redis持久化實現的方法是什么”,在日常操作中,相信很多人在Redis持久化實現的方法是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Redis持久化實現的方法是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

持久化套路

OK,一般我們在生產上采用的持久化策略為

  • (1)master關閉持久化

  • (2)slave開RDB即可,必要的時候AOF和RDB都開啟

該策略能夠適應絕大部分場景,絕大部分集群架構。
為什么是絕大部分場景?
因為這套策略存在部分的數據丟失可能性。redis的主從復制是異步的,master執行完客戶端請求的命令后會立即返回結果給客戶端,然后異步的方式把命令同步給slave。因此master可能還未來得及將命令傳輸給slave,就宕機了,此時slave變為master,數據就丟了。
幸運的是,絕大部分業務場景,都能容忍數據的部分丟失。假設,真的遇到緩存雪崩的情況,代碼中也有熔斷器來進行資源保護,不至于所有的請求都轉發到數據庫上,導致我們的服務崩潰!
ps:這里的緩存雪崩是指同一時間來了一堆請求,請求的key在redis中不存在,導致請求全部轉發到數據庫上。
為什么是絕大部分集群架構?
因為在集群中存在redis讀寫分離的情況,就不適合這套方案了。
幸運的是,由于采用redis讀寫分離架構,就必須要考慮主從同步的延遲性問題,徒增系統復雜度。目前業內采用redis讀寫分離架構的項目,真的太少了。

 

為什么這么做

 
(1)master關閉持久化

原因很簡單,因為無論哪種持久化方式都會影響redis的性能,哪一種持久化都會造成CPU卡頓,影響對客戶端請求的處理。為了保證讀寫最佳性能,將master的持久化關閉!
RDB持久化
RDB持久化是將當前進程中的數據生成快照保存到硬盤(因此也稱作快照持久化),保存的文件后綴是rdb;當Redis重新啟動時,可以讀取快照文件恢復數據。
那么RDB持久化的過程,相當于在執行bgsave命令。該命令執行過程如下圖所示

Redis持久化實現的方法是什么

如圖所示,主線程需要調用系統函數fork(),構建出一個子進程進行持久化!很不幸的是,在構建子進程的過程中,父進程就會阻塞,無法響應客戶端的請求!  
而且,在測試中發現,fork函數在虛擬機上較慢,真機上較快。考慮到現在都是部署在docker容器中,很少部署在真機上,為了性能,master不建議打開RDB持久化!  
 AOF持久化  
RDB持久化是將進程數據寫入文件,而AOF持久化(即Append Only File持久化),則是將Redis執行的每次寫命令記錄到單獨的日志文件中。  
隨著時間的流逝,你會發現這個AOF文件越來越大,于是redis有一套rewrite機制,來縮小AOF文件的體積。然而,在rewrite的過程中也是需要父進程來fork出一個子進程進行rewrite操作。至于fork函數的影響,上面提到過了。  
還有一個就是刷盤策略fsync,這個值推薦是配everysec,也就是Redis會默認每隔一秒進行一次fsync調用,將緩沖區中的數據寫到磁盤。  
然而,如果磁盤性能不穩定,fsync的調用時間超過1秒鐘。此時主線程進行AOF的時候會對比上次fsync成功的時間;如果距上次不到2s,主線程直接返回;如果超過2s,則主線程阻塞直到fsync同步完成。  
因此AOF也是會影響redis的性能的。

ps  :linux函數中,wrtie函數將數據寫入文件的時候,是將數據寫入操作系統的緩沖區,還并未刷入磁盤。而fsync函數,可以強制讓操作系統將緩沖區數據刷入磁盤。  

綜上所述,我們為了保證讀寫性能最大化,將master的持久化關閉。

 
(2)slave開RDB即可,必要的時候AOF和RDB都開啟

首先,我先說明一下,我不推薦單開AOF的原因是,基于AOF的數據恢復太慢。
你要想,我們已經做了主從復制,數據已經實現備份,為什么slave還需要開持久化?
因為某一天可能因為某某工程,把機房的電線挖斷了,就會導致master和slave機器同時宕機。
那么這個時候,我們需要迅速恢復集群,而RDB文件文件小、恢復快,因此災難恢復常用RDB文件。

其次,官網也不推薦單開AOF,地址如下:
https://redis.io/topics/persistence
截圖如下

Redis持久化實現的方法是什么

所以,如果實在對數據安全有一定要求,將AOF和RDB持久化都開啟。

另外,做好災難備份。利用linux的scp命令,定期將rdb文件拷貝到云服務器上。
ps:scp是secure copy的簡寫,用于在Linux下進行遠程拷貝文件的命令,和它類似的命令有cp,不過cp只是在本機進行拷貝不能跨服務器,而且scp傳輸是加密的。

到此,關于“Redis持久化實現的方法是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

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

AI

建平县| 平湖市| 庄河市| 永兴县| 南平市| 裕民县| 读书| 江都市| 通城县| 儋州市| 色达县| 湘潭市| 武乡县| 宜都市| 洱源县| 孙吴县| 洛宁县| 谷城县| 吴忠市| 麻阳| 高唐县| 广汉市| 大埔区| 石河子市| 卓资县| 晋城| 兴海县| 商南县| 清水县| 环江| 桂林市| 汕头市| 阿荣旗| 织金县| 公安县| 晋中市| 黑水县| 焉耆| 枣阳市| 长丰县| 那曲县|