Redis的持久化方案詳解_Redis

來源:腳本之家  責任編輯:小易  

持久層用來抄固化數據,如常說的DAO層,操作數據庫將數據入庫業務層用來實現整體的業務邏輯 如 前臺襲獲得了數據,邏輯層去解析這些數據,效驗這些數據等操作表現層很好解釋百 你現在看到的網頁 一些界面 都屬于表現層的東西度可以用一些Html,jsp,Swing來實現至于mvc么對應的是 model(模型)view(視圖)Controller(控制)在javaweb中就很好理解了再知XX系統中,前臺頁面屬于view 貫穿前臺后臺持久層的一套模型就是道model(EJB,Spring來實現)而連接前臺后臺進行邏輯操作的就是Controller(Struts來實現)www.13333515.buzz防采集請勿采集本網。

Redis支持RDB與AOF兩種持久化機制,持久化可以避免因進程異常退出或down機導致的數據丟失問題,在下次重啟時能利用之前的持久化文件實現數據恢復。

你是指數據持久化還是運行持久化?如果是數據持久化,可以使用serialize()和unserialize()來處理. 試一試: php str='';array=array('php','數據','持久化');str=serialize($array);可以將數組$

RDB持久化

首先要明白序列化的作用,序列化一般用于程序中數據的傳遞,如果程序B(程序B不能訪問Redis)需要程序A放在redis中數據,這樣的話使用序列化后,一些復雜的類型,比如hash,list,可以傳遞序列化

RDB持久化即通過創建快照(壓縮的二進制文件)的方式進行持久化,保存某個時間點的全量數據。RDB持久化是Redis默認的持久化方式。RDB持久化的觸發包括手動觸發與自動觸發兩種方式。

服務器每次修改一個鍵之后,都會對臟(dirty)鍵計數器的值增1,這個計數器會觸發服務器的持久化以及復制操作。如果服務器開啟了數據庫通知功能,那么在對鍵進行修改之后,服務器將按配置發送相應的數據庫

手動觸發 save, 在命令行執行save命令,將以同步的方式創建rdb文件保存快照,會阻塞服務器的主進程,生產環境中不要用 bgsave, 在命令行執行bgsave命令,將通過fork一個子進程以異步的方式創建rdb文件保存快照,除了fork時有阻塞,子進程在創建rdb文件時,主進程可繼續處理請求

Persistence 持久化 Resource pooling 資源池 Synchronization 同步 Transactions 事務 三、Mybatis MyBatis 是支持普通 SQL查詢,存儲過程和高級映射的優秀持久層框架。MyBatis 消除了幾乎所有的JDBC代碼

開發者實現上面的問題,一般都是通過代碼來控制,有兩段代碼可以實現,需要的學著可以去菜鳥在線上找,還有更多其他開發技術。

自動觸發

在redis.conf中配置 save m n 定時觸發,如 save 900 1表示在900s內至少存在一次更新就觸發

主從復制時,如果從節點執行全量復制操作,主節點自動執行bgsave生成RDB文件并發送給從節點

執行debug reload命令重新加載Redis時

執行shutdown且沒有開啟AOF持久化

redis.conf中RDB持久化配置

 # 只要滿足下列條件之一,則會執行bgsave命令

save 900 1 # 在900s內存在至少一次寫操作

save 300 10

save 60 10000

# 禁用RBD持久化,可在最后加 save ""

# 當備份進程出錯時主進程是否停止寫入操作

stop-writes-on-bgsave-error yes

# 是否壓縮rdb文件 推薦no 相對于硬盤成本cpu資源更貴

rdbcompression no

AOF持久化

AOF(Append-Only-File)持久化即記錄所有變更數據庫狀態的指令,以append的形式追加保存到AOF文件中。在服務器下次啟動時,就可以通過載入和執行AOF文件中保存的命令,來還原服務器關閉前的數據庫狀態。

redis.conf中AOF持久化配置如下

# 默認關閉AOF,若要開啟將no改為yes

appendonly no

# append文件的名字

appendfilename "appendonly.aof"

# 每隔一秒將緩存區內容寫入文件 默認開啟的寫入方式

appendfsync everysec

# 當AOF文件大小的增長率大于該配置項時自動開啟重寫(這里指超過原大小的100%)。

auto-aof-rewrite-percentage 100

# 當AOF文件大小大于該配置項時自動開啟重寫

auto-aof-rewrite-min-size 64mb

AOF持久化的實現包括3個步驟: 命令追加:將命令追加到AOF緩沖區

文件寫入:緩沖區內容寫到AOF文件

文件保存:AOF文件保存到磁盤

開發者實現上面的問題,一般都是通過代碼來控制,有兩段代碼可以實現,需要的學著可以去菜鳥在線上找,還有更多其他開發技術。

其中后兩步的頻率通過appendfsync來配置,appendfsync的選項包括 always, 每執行一個命令就保存一次,安全性最高,最多只丟失一個命令的數據,但是性能也最低(頻繁的磁盤IO)

everysec,每一秒保存一次,推薦使用,在安全性與性能之間折中,最多丟失一秒的數據

no, 依賴操作系統來執行(一般大概30s一次的樣子),安全性最低,性能最高,丟失操作系統最后一次對AOF文件觸發SAVE操作之后的數據

開發者實現上面的問題,一般都是通過代碼來控制,有兩段代碼可以實現,需要的學著可以去菜鳥在線上找,還有更多其他開發技術。

AOF通過保存命令來持久化,隨著時間的推移,AOF文件會越來越大,Redis通過AOF文件重寫來解決AOF文件不斷增大的問題(可以減少文件的磁盤占有量,加快數據恢復的速度),原理如下:

調用fork,創建一個子進程

子進程讀取當前數據庫的狀態來“重寫”一個新的AOF文件(這里雖然叫“重寫”,但實際并沒有對舊文件進行任何讀取,而是根據數據庫的當前狀態來形成指令)

主進程持續將新的變動同時寫到AOF重寫緩沖區與原來的AOF緩沖區中

主進程獲取到子進程重寫AOF完成的信號,調用信號處理函數將AOF重寫緩沖區內容寫入新的AOF文件中,并對新文件進行重命名,原子地覆蓋原有AOF文件,完成新舊文件的替換

AOF的重寫也分為手動觸發與自動觸發 手動觸發: 直接調用bgrewriteaof命令 自動觸發: 根據auto-aof-rewrite-min-size和auto-aof-rewrite-percentage參數確定自動觸發時機。其中auto-aof-rewrite-min-size表示運行AOF重寫時文件最小體積,默認為64MB。auto-aof-rewrite-percentage表示當前AOF文件大小(aof_current_size)和上一次重寫后AOF文件大小(aof_base_size)的比值。自動觸發時機為 aof_current_size > auto-aof-rewrite-min-size &&(aof_current_size - aof_base_size)/aof_base_size> = auto-aof-rewrite-percentage

開發者實現上面的問題,一般都是通過代碼來控制,有兩段代碼可以實現,需要的學著可以去菜鳥在線上找,還有更多其他開發技術。

RDB vs AOF

RDB與AOF兩種方式各有優缺點。 RDB的優點:與AOF相比,RDB文件相對較小,恢復數據比較快(原因見數據恢復部分) RDB的缺點:服務器宕機,RBD方式會丟失掉上一次RDB持久化后的數據;使用bgsave fork子進程時會耗費內存。 AOF的優點: AOF只是追加文件,對服務器性能影響較小,速度比RDB快,消耗內存也少,同時可讀性高。 AOF的缺點:生成的文件相對較大,即使通過AOF重寫,仍然會比較大;恢復數據的速度比RDB慢。

數據庫的恢復

服務器啟動時,如果沒有開啟AOF持久化功能,則會自動載入RDB文件,期間會阻塞主進程。如果開啟了AOF持久化功能,服務器則會優先使用AOF文件來還原數據庫狀態,因為AOF文件的更新頻率通常比RDB文件的更新頻率高,保存的數據更完整。

redis數據庫恢復的處理流程如下,

在數據恢復方面,RDB的啟動時間會更短,原因有兩個:

RDB 文件中每一條數據只有一條記錄,不會像AOF日志那樣可能有一條數據的多次操作記錄。所以每條數據只需要寫一次就行了,文件相對較小。

RDB 文件的存儲格式和Redis數據在內存中的編碼格式是一致的,不需要再進行數據編碼工作,所以在CPU消耗上要遠小于AOF日志的加載。

但是在進行RDB持久化時,fork出來進行dump操作的子進程會占用與父進程一樣的內存,采用的copy-on-write機制,對性能的影響和內存的消耗都是比較大的。比如16G內存,Redis已經使用了10G,這時save的話會再生成10G,變成20G,大于系統的16G。這時候會發生交換,要是虛擬內存不夠則會崩潰,導致數據丟失。所以在用redis的時候一定對系統內存做好容量規劃。

RDB、AOF混合持久化

Redis從4.0版開始支持RDB與AOF的混合持久化方案。首先由RDB定期完成內存快照的備份,然后再由AOF完成兩次RDB之間的數據備份,由這兩部分共同構成持久化文件。該方案的優點是充分利用了RDB加載快、備份文件小及AOF盡可能不丟數據的特性。缺點是兼容性差,一旦開啟了混合持久化,在4.0之前的版本都不識別該持久化文件,同時由于前部分是RDB格式,閱讀性較低。

開啟混合持久化

aof-use-rdb-preamble yes

數據恢復加載過程就是先按照RDB進行加載,然后把AOF命令追加寫入。

持久化方案的建議

如果Redis只是用來做緩存服務器,比如數據庫查詢數據后緩存,那可以不用考慮持久化,因為緩存服務失效還能再從數據庫獲取恢復。

如果你要想提供很高的數據保障性,那么建議你同時使用兩種持久化方式。如果你可以接受災難帶來的幾分鐘的數據丟失,那么可以僅使用RDB。

通常的設計思路是利用主從復制機制來彌補持久化時性能上的影響。即Master上RDB、AOF都不做,保證Master的讀寫性能,而Slave上則同時開啟RDB和AOF(或4.0以上版本的混合持久化方式)來進行持久化,保證數據的安全性。

到此這篇關于Redis的持久化方案詳解的文章就介紹到這了,更多相關Redis的持久化方案內容請搜索真格學網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持真格學網!

1.什么是持久化?本人找了好多文章都沒有找到滿意的答案,最后是從孫衛琴寫的《精通Hibernate:Java對象持久化技術詳解》中,看到如下的解釋,感覺還是比較完整的。摘抄如下:狹義的理解:“持久化”僅僅指把域對象永久保存到數據庫中;廣義的理解,“持久化”包括和數據庫相關的各種操作。保存:把域對象永久保存到數據庫。更新:更新數據庫中域對象的狀態。從數據庫中刪除一個域對象。加載:根據特定的OID,把一個域對象從數據庫加載到內存。查詢:根據特定的查詢條件,把符合查詢條件的一個或多個域對象從數據庫加載內在存中。2.為什么要持久化?持久化技術封裝了數據訪問細節,為大部分業務邏輯提供面向對象的API。通過持久化技術可以減少訪問數據庫數據次數,增加應用程序執行速度;代碼重用性高,能夠完成大部分數據庫操作;松散耦合,使持久化不依賴于底層數據庫和上層業務邏輯實現,更換數據庫時只需修改配置文件而不用修改代碼內容來自www.13333515.buzz請勿采集。


  • 本文相關:
  • redis的2種持久化方案深入講解
  • redis持久化的介紹
  • 從源碼解讀redis持久化
  • 淺談redis內存數據的持久化方式
  • 基于redis分布式鎖的實現代碼
  • redis數據庫的應用場景介紹
  • redislive監控redis服務的圖文教程_動力節點java 學院整理
  • redis如何實現數據庫讀寫分離詳解
  • 安裝redis就那么幾步,很簡單
  • 圖文詳解windows下使用redis緩存工具的方法
  • 編譯安裝redisd的方法示例詳解
  • centos7.5使用mysql_multi方式安裝mysql5.7.28多實例(詳解)
  • linux 下redis5.0.0安裝教程詳解
  • redis有序集合類型的常用命令小結
  • 什么是數據持久化?
  • 請問JAVA三層架構,持久層,業務層,表現層,都該怎么理解?和MVC三層模型有什么區別
  • 連接redis的超時間一般設置多少
  • redis什么時候用哈希
  • 如何用php實現持久化處理
  • REDIS 命令 dump key 序列化怎么理解?
  • redis日常維護有哪些工作
  • java框架有哪些常用框架?
  • 如何在Unity3D游戲開發中實現數據持久化?
  • 精通Hibernate:Java對象持久化技術詳解
  • 網站首頁網頁制作腳本下載服務器操作系統網站運營平面設計媒體動畫電腦基礎硬件教程網絡安全mssqlmysqlmariadboracledb2mssql2008mssql2005sqlitepostgresqlmongodbredisaccess數據庫文摘數據庫其它首頁redisredis的2種持久化方案深入講解redis持久化的介紹從源碼解讀redis持久化淺談redis內存數據的持久化方式基于redis分布式鎖的實現代碼redis數據庫的應用場景介紹redislive監控redis服務的圖文教程_動力節點java 學院整理redis如何實現數據庫讀寫分離詳解安裝redis就那么幾步,很簡單圖文詳解windows下使用redis緩存工具的方法編譯安裝redisd的方法示例詳解centos7.5使用mysql_multi方式安裝mysql5.7.28多實例(詳解)linux 下redis5.0.0安裝教程詳解redis有序集合類型的常用命令小結超強、超詳細redis數據庫入門教程redis常用命令、常見錯誤、配置技redis操作命令總結redis中5種數據結構的使用場景介64位windows下安裝redis教程redis中使用redis-dump導出、導入redis中統計各種數據大小的方法redis常用命令小結讓redis在你的系統中發揮更大作用centos 6.6下redis安裝配置記錄阿里云服務器安裝配置redis的方法并且加入redis分布式鎖的實現方式(redis面試題)redis3.2配置文件redis.conf詳細說明nosql和redis簡介及redis在windows下的安redis基本類型和使用方法詳解利用redis實現排行榜的小秘訣windows下redis安裝配置教程淺談redis的maxmemory設置以及淘汰策略深入理解redis分布式鎖和消息隊列redis數據類型及應用場景知識點總結
    免責聲明 - 關于我們 - 聯系我們 - 廣告聯系 - 友情鏈接 - 幫助中心 - 頻道導航
    Copyright © 2017 www.13333515.buzz All Rights Reserved
    3排列五开奖结果