1. 程式人生 > >JAVAWEB開發之redis學習(十)——redis持久化儲存

JAVAWEB開發之redis學習(十)——redis持久化儲存

一、Redis提供了哪些持久化機制:

1). RDB持久化
該機制是指在指定的時間間隔內將記憶體中的資料集快照寫入磁碟。    
2). AOF持久化:
該機制將以日誌的形式記錄伺服器所處理的每一個寫操作,在Redis伺服器啟動之初會讀取該檔案來重新構建資料庫,以保證啟動後資料庫中的資料是完整的。
3). 無持久化:
我們可以通過配置的方式禁用Redis伺服器的持久化功能,這樣我們就可以將Redis視為一個功能加強版的memcached了。
4). 同時應用AOF和RDB。

二、RDB機制的優勢和劣勢:

RDB存在哪些優勢呢?
1). 一旦採用該方式,那麼你的整個Redis資料庫將只包含一個檔案,這對於檔案備份而言是非常完美的。比如,你可能打算每個小時歸檔一次最近24小時的資料,同時還要每天歸檔一次最近30天的資料。通過這樣的備份策略,一旦系統出現災難性故障,我們可以非常容易的進行恢復。
2). 對於災難恢復而言,RDB是非常不錯的選擇。因為我們可以非常輕鬆的將一個單獨的檔案壓縮後再轉移到其它儲存介質上。
3). 效能最大化。對於Redis的服務程序而言,在開始持久化時,它唯一需要做的只是fork出子程序,之後再由子程序完成這些持久化的工作,這樣就可以極大的避免服務程序執行IO操作了。
4). 相比於AOF機制,如果資料集很大,RDB的啟動效率會更高。
RDB又存在哪些劣勢呢?

1). 如果你想保證資料的高可用性,即最大限度的避免資料丟失,那麼RDB將不是一個很好的選擇。因為系統一旦在定時持久化之前出現宕機現象,此前沒有來得及寫入磁碟的資料都將丟失。
2). 由於RDB是通過fork子程序來協助完成資料持久化工作的,因此,如果當資料集較大時,可能會導致整個伺服器停止服務幾百毫秒,甚至是1秒鐘。

三、AOF機制的優勢和劣勢

AOF的優勢有哪些呢?
1). 該機制可以帶來更高的資料安全性,即資料永續性。Redis中提供了3中同步策略,即每秒同步、每修改同步和不同步。事實上,每秒同步也是非同步完成的,其效率也是非常高的,所差的是一旦系統出現宕機現象,那麼這一秒鐘之內修改的資料將會丟失。而每修改同步,我們可以將其視為同步持久化,即每次發生的資料變化都會被立即記錄到磁碟中。可以預見,這種方式在效率上是最低的。至於無同步,無需多言,我想大家都能正確的理解它。
2). 由於該機制對日誌檔案的寫入操作採用的是append模式,因此在寫入過程中即使出現宕機現象,也不會破壞日誌檔案中已經存在的內容。然而如果我們本次操作只是寫入了一半資料就出現了系統崩潰問題,不用擔心,在Redis下一次啟動之前,我們可以通過redis-check-aof工具來幫助我們解決資料一致性的問題。
3). 如果日誌過大,Redis可以自動啟用rewrite機制。即Redis以append模式不斷的將修改資料寫入到老的磁碟檔案中,同時Redis還會建立一個新的檔案用於記錄此期間有哪些修改命令被執行。因此在進行rewrite切換時可以更好的保證資料安全性。
4). AOF包含一個格式清晰、易於理解的日誌檔案用於記錄所有的修改操作。事實上,我們也可以通過該檔案完成資料的重建。
AOF的劣勢有哪些呢?

1). 對於相同數量的資料集而言,AOF檔案通常要大於RDB檔案。
2). 根據同步策略的不同,AOF在執行效率上往往會慢於RDB。總之,每秒同步策略的效率是比較高的,同步禁用策略的效率和RDB一樣高效。

四、其它

1. Snapshotting:
預設情況下,Redis會將資料集的快照dump到dump.rdb檔案中。此外,我們也可以通過配置檔案來修改Redis伺服器dump快照的頻率,在開啟6379.conf檔案之後,我們搜尋save,可以看到下面的配置資訊:
save 900 1              #在900秒(15分鐘)之後,如果至少有1個key發生變化,則dump記憶體快照。
save 300 10            #在300秒(5分鐘)之後,如果至少有10個key發生變化,則dump記憶體快照。
save 60 10000        #在60秒(1分鐘)之後,如果至少有10000個key發生變化,則dump記憶體快照。
2. Dump快照的機制:

1). Redis先fork子程序。
2). 子程序將快照資料寫入到臨時RDB檔案中。
3). 當子程序完成資料寫入操作後,再用臨時檔案替換老的檔案。 
3. AOF檔案:
上面已經多次講過,RDB的快照定時dump機制無法保證很好的資料永續性。如果我們的應用確實非常關注此點,我們可以考慮使用Redis中的AOF機制。對於Redis伺服器而言,其預設的機制是RDB,如果需要使用AOF,則需要修改配置檔案中的以下條目:
將appendonly no改為appendonly yes
從現在起,Redis在每一次接收到資料修改的命令之後,都會將其追加到AOF檔案中。在Redis下一次重新啟動時,需要載入AOF檔案中的資訊來構建最新的資料到記憶體中。
4. AOF的配置:
在Redis的配置檔案中存在三種同步方式,它們分別是:
appendfsync always     #每次有資料修改發生時都會寫入AOF檔案。
appendfsync everysec  #每秒鐘同步一次,該策略為AOF的預設策略。
appendfsync no          #從不同步。高效但是資料不會被持久化。
5. 如何修復壞損的AOF檔案:
1). 將現有已經壞損的AOF檔案額外拷貝出來一份。
2). 執行"redis-check-aof --fix <filename>"命令來修復壞損的AOF檔案。
3). 用修復後的AOF檔案重新啟動Redis伺服器。
6. Redis的資料備份:
在Redis中我們可以通過copy的方式線上備份正在執行的Redis資料檔案。這是因為RDB檔案一旦被生成之後就不會再被修改。Redis每次都是將最新的資料dump到一個臨時檔案中,之後在利用rename函式原子性的將臨時檔案改名為原有的資料檔名。因此我們可以說,在任意時刻copy資料檔案都是安全的和一致的。鑑於此,我們就可以通過建立cron job的方式定時備份Redis的資料檔案,並將備份檔案copy到安全的磁碟介質中。  




相關推薦

JAVAWEB開發redis學習()——redis持久化儲存

一、Redis提供了哪些持久化機制: 1). RDB持久化: 該機制是指在指定的時間間隔內將記憶體中的資料集快照寫入磁碟。    2). AOF持久化: 該機制將以日誌的形式記錄伺服器所處理的每一個寫操作,在Redis伺服器啟動之初會讀取該檔案來重新構建資料庫,以保證啟動

JAVAWEB開發redis學習(九)——redis主從複製入門及原理

一、Redis的Replication 下面的列表清楚的解釋了Redis Replication的特點和優勢。 1). 同一個Master可以同步多個Slaves。 2). Slave同樣可以接受其它Slaves的連線和同步請求,這樣可以有效的分載Master的同步壓力。因

redis學習系列——redis持久化

htable clas aof重寫 操作 本地磁盤 man 器) 重寫 所有 1、寫操作的流程 2、RDB快照-redis的第一個持久化策略 第一種是以快照的形式持久化到本地磁盤(RDB文件)。 持久化策略是: 1.配置(save N M)在N秒內,redis至少發生M次

Redis學習Redis的復制(Master/Slave)【重要】

strong moni 機器 png cati 其中 起名字 ima 下一個 一、是什麽 官網 行話:也就是我們所說的主從復制,主機數據更新後根據配置和策略,自動同步到備機的master/slaver機制,Master以寫為主,Slave以讀為主 二、能幹嘛 讀

redis學習(五) 使用jedis執行lua指令碼(實現一個對IP的限流)

使用jedis執行lua指令碼(實現一個對IP的限流) 上一篇學習了怎麼安裝lua,這一篇學習編寫一個lua指令碼用jedis執行,實現對一個IP的限流 LUA指令碼如下,第一次使用incr對KEY(某個IP作為KEY)加一,如果是第一次訪問,使用e

Redis學習日記--redis持久化

1.什麼是持久化 將資料從掉電易失的記憶體存放到能夠永久儲存的裝置上 2.Redis持久化方式 RDB(Redis DB)             AOF(AppendOnlyF Redis持久化-RDB 在預設情況下,Redis 將資料庫快照儲存在名字為 du

Redis學習Redis的複製(Master/Slave)【重要】

一、是什麼 官網 行話:也就是我們所說的主從複製,主機資料更新後根據配置和策略,自動同步到備機的master/slaver機制,Master以寫為主,Slave以讀為主 二、能幹嘛 讀寫分離  容災恢復 三、怎麼玩 1.配從(庫)不配主(庫) 2.從庫配置:slaveof 主庫IP 主庫埠

JAVAWEB開發Hibernate詳解(二)——Hibernate的持久化類狀態與轉換、以及一級快取詳解、關聯關係的對映(一對多、多對多、級聯)

package cn.test.hibernate3.demo2; import org.hibernate.Session; import org.hibernate.Transaction; import org.junit.Test; import cn.test.hibernate3.demo2.

Redis學習筆記(一)-持久化

snap -m rdb持久化 缺點 tro truncate only ont sync 一、RDB持久方式 RDB持久化是把當前進程的數據已快照的形式保存到硬盤的過程。 觸發方式: 1、手動觸發命令:save和bgsave save:阻塞式,內存較大的實例在執行過程中會造

redis學習(五) redis進階事務和過期時間的應用

事務redis中的事務是一組命令的集合。使得一個事務中的redis命令要麼全執行,要麼全不執行使用方式: multi 和exec完成multi: 告訴redis將同一個事務的命令儲存起來。  之後傳送兩個SADD, redis返回queued表示命令進入了等待執行的事務佇列中

Redis學習筆記-----Redis數據過期策略詳解

登錄 及其 可能 ger 方式 處理方式 base 持久化數據 簡單的   本文對Redis的過期機制簡單的講解一下  講解之前我們先拋出一個問題,我們知道很多時候服務器經常會用到redis作為緩存,有很多數據都是臨時緩存一下,可能用過之後很久都不會再用到了(比如暫存ses

Redis學習筆記--Redis客戶端(三)

本機 -c trace 圖形 tro cli family 毫秒 ati 1.Redis客戶端 1.1 Redis自帶的客戶端   (1)啟動   啟動客戶端命令:[root@kwredis bin]# ./redis-cli -h 127.0.0.1 -p 6379

android入門開發Activity學習

今天我們整理下android開發裡的Activity元件,Activity元件是非常重要的一個元件。現在我們就開始,首先從建立一個空的android專案開始,如圖: 既然我們要建立一個空的專案那麼我們就從頭開始,預設會給我們建立一個activity,我們這裡不需要它自動建立,

android入門開發Intent學習

Intent的四種開啟方式(顯示開啟): //顯示intent第一種方式 Intent intent = new Intent(); intent.setClass(this, Activity_one.class);   start

Redis學習筆記——Redis的基本操作

之前介紹過如何在ubuntu安裝Redis伺服器:https://www.cnblogs.com/zifeiy/p/9062738.html 接下來,我們在Redis上進行一些基本的操作。 所縣使用命令:redis-cli登陸Redis命令列。 然後執行下面的指令進行測試與學習: 字串型別的增刪改查 #

JavaWeb開發詳解Servlet及Servlet容器

由於 servlet開發 遊戲 metadata 移動互 -o 每一個 web開發 port 自JavaEE誕生伊始,Servlet容器和Servlet技術,就構成了JavaEE應用的核心,配合其它組件,它們完善了Java企業級開發的全套解決方案。小到一個靜態博客網站,大到

Redis學習】--Redis叢集搭建

文章目錄 1. Redis部署 1.1 安裝依賴環境 1.2 安裝 Redis 1.3 啟動Redis 前臺啟動: 後臺啟動: 1.4 測試客戶端可用情況:

Redis學習日誌--Redis的搭建

** 前言 ** Redis 是完全開源免費的,遵守BSD協議,是一個高效能的key-value資料庫(key-value緩衝產品)。 特點: 1.Redis支援資料的持久化,可以將記憶體中的資料儲存在磁碟中,重啟的時候可以再次載入進行使用。 2.Redis不僅僅支援簡單的key-v

javaWeb開發攔截器和過濾器的區別

攔截器和過濾的關係圖   攔截器和過濾器簡要區別 1、攔截器是基於java的反射機制的,而過濾器是基於函式回撥。2、攔截器不依賴與servlet容器,過濾器依賴與servlet容器。3、攔截器只能對action請求起作用,而過濾器則可以對幾乎所有的請求起作用。4、攔截器可以訪問action

Redis學習Redis入門安裝及使用

第一份工作的時候就聽著老大說要使用Redis,當時一臉懵逼,到底什麼是Redis呢,Redis又有什麼作用的。不過還沒來得及向老大學習的時候,公司找了些理由就把所有的員工都給開了。趁著這段找工作的時間,正好可以來好好研究一下Redis了。廢話不多說,開始!