搜尋
首頁資料庫Redisredis進行持久化有哪兩種方式
redis進行持久化有哪兩種方式Jan 29, 2021 am 09:35 AM
redis耐力

redis進行持久化有哪兩種方式

1、redis簡介

REmote DIctionary Server(Redis) 是由Salvatore Sanfilippo寫的key-value儲存系統。

(學習影片分享:redis影片教學

Redis是一個開源的使用ANSI C語言編寫、遵守BSD協定、支援網路、可基於記憶體亦可持久化的日誌類型、Key-Value資料庫,並提供多種語言的API。

它通常被稱為資料結構伺服器,因為值(value)可以是字串(String), 雜湊(Hash), 列表(list), 集合(sets) 和有序集合(sorted sets )等類型。

它跟memcached類似,不過資料可以持久化,而且支援的資料型態很豐富。有字串,鍊錶,集 合和有序集合。支援在伺服器端計算集合的並,交和補集(difference)等,也支援多種排序功能。所以Redis也可以被看成是一個資料結構伺服器。

Redis的所有資料都是保存在記憶體中,然後不定期的透過非同步方式保存到磁碟上(這稱為「半持久化模式」);也可以把每一次資料變化都寫入到一個append only file(aof)裡面(這稱為「全持久化模式」)。

由於Redis的資料都存放在記憶體中,如果沒有配置持久化,redis重啟後資料就全遺失了,於是需要開啟redis的持久化功能,將資料保存到磁碟上,當redis重啟後,可以從磁碟中恢復資料。 redis提供兩種方式進行持久化,一種是RDB持久化(原理是將Reids在記憶體中的資料庫記錄定時dump到磁碟上的RDB持久化),另外一種是AOF(append only file)持久化(原理是將Reids的操作日誌以追加的方式寫入檔案)。那麼這兩種持久化方式有什麼差別呢,改如何選擇呢?網路上看了大多數都是介紹這兩種方式怎麼配置,怎麼使用,就是沒有介紹二者的區別,在什麼應用場景下使用。

2、二者的區別

RDB持久化是指在指定的時間間隔內將記憶體中的資料集快照寫入磁碟,實際操作過程是fork一個子進程,先將資料集寫入暫存文件,寫入成功後,再取代先前的文件,用二進位壓縮儲存。

redis進行持久化有哪兩種方式

3、二者優缺點

RDB存在哪些優點呢?

1). 一旦採用該方式,那麼你的整個Redis資料庫將只包含一個文件,這對於文件備份而言是非常完美的。例如,你可能打算每個小時歸檔一次最近24小時的數據,同時還要每天歸檔一次最近30天的數據。透過這樣的備份策略,一旦系統出現災難性故障,我們可以非常容易的進行復原。

2). 對於災難復原而言,RDB是非常不錯的選擇。因為我們可以非常輕鬆的將一個單獨的檔案壓縮後再轉移到其它儲存媒體上。

3). 效能最大化。對於Redis的服務進程而言,在開始持久化時,它唯一需要做的只是fork出子進程,之後再由子進程完成這些持久化的工作,這樣就可以極大的避免服務進程執行IO操作了。

4). 相較於AOF機制,如果資料集很大,RDB的啟動效率會更高。

RDB又存在哪些劣勢呢?

1). 如果你想保證資料的高可用性,即最大限度的避免資料遺失,那麼RDB將不是一個很好的選擇。因為系統一旦在定時持久化之前出現宕機現象,此前沒有來得及寫入磁碟的資料都會遺失。

2). 由於RDB是透過fork子進程來協助完成資料持久化工作的,因此,如果當資料集較大時,可能會導致整個伺服器停止服務幾百毫秒,甚至是1秒鐘。

AOF的優勢有哪些呢?

1). 此機制可以帶來更高的資料安全性,即資料持久性。 Redis中提供了3中同步策略,分別是每秒同步、每修改同步、不同步。事實上,每秒同步也是非同步完成的,其效率也是非常高的,所差的是一旦系統出現宕機現象,那麼這一秒鐘之內修改的資料將會遺失。而每修改同步,我們可以將其視為同步持久化,即每次發生的資料變化都會立即記錄到磁碟中。可以預見,這種方式在效率上是最低的。至於無同步,無需多言,我想大家都能正確的理解它。

2). 由於該機制對日誌檔案的寫入操作採用的是append模式,因此在寫入過程中即使出現宕機現象,也不會破壞日誌檔案中已經存在的內容。然而如果我們這次操作只是寫入了一半資料就出現了系統崩潰問題,不用擔心,在Redis下一次啟動之前,我們可以透過redis-check-aof工具來幫助我們解決資料一致性的問題。

3). 如果日誌過大,Redis可以自動啟用rewrite機制。即Redis以append模式不斷的將修改資料寫入到舊的磁碟檔案中,同時Redis也會建立一個新的檔案用於記錄此期間有哪些修改命令被執行。因此在進行rewrite切換時可以更好的保證資料安全性。

4). AOF包含一個格式清晰、易於理解的日誌檔案用來記錄所有的修改操作。事實上,我們也可以透過該文件完成資料的重建。

AOF的缺點有哪些呢?

1). 對於相同數量的資料集而言,AOF檔案通常要大於RDB檔案。 RDB 在復原大資料集時的速度比 AOF 的復原速度還要快。

2). 根據同步策略的不同,AOF在運作效率上往往會慢於RDB。總之,每秒同步策略的效率是比較高的,同步停用策略的效率和RDB一樣有效率。

二者選擇的標準,就是看系統是願意犧牲一些效能,換取更高的快取一致性(aof),還是願意寫作業頻繁的時候,不啟用備份來換取更高的效能,待手動執行save的時候,再做備份(rdb)。 rdb這個就更有些 eventually consistent的意思了。

4、常用設定

RDB持久化設定

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分鐘)之後,如果至少有10,000個key發生變化,則dump記憶體快照。

AOF持久化設定

在Redis的設定檔中有三種同步方式,它們分別是:

appendfsync always     #每次有資料修改發生時都會寫入AOF檔。

appendfsync everysec  #每秒鐘同步一次,此策略為AOF的缺省策略。

appendfsync no          #從不同步。高效率但是資料不會被持久化。

5、參考資料

http://blog.csdn.net/jackpk/article/details/30073097
http://www.jb51.net/article/65264.htm

相關推薦:redis資料庫教學

以上是redis進行持久化有哪兩種方式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:博客园。如有侵權,請聯絡admin@php.cn刪除
es和redis区别es和redis区别Jul 06, 2019 pm 01:45 PM

Redis是现在最热门的key-value数据库,Redis的最大特点是key-value存储所带来的简单和高性能;相较于MongoDB和Redis,晚一年发布的ES可能知名度要低一些,ES的特点是搜索,ES是围绕搜索设计的。

一起来聊聊Redis有什么优势和特点一起来聊聊Redis有什么优势和特点May 16, 2022 pm 06:04 PM

本篇文章给大家带来了关于redis的相关知识,其中主要介绍了关于redis的一些优势和特点,Redis 是一个开源的使用ANSI C语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式存储数据库,下面一起来看一下,希望对大家有帮助。

实例详解Redis Cluster集群收缩主从节点实例详解Redis Cluster集群收缩主从节点Apr 21, 2022 pm 06:23 PM

本篇文章给大家带来了关于redis的相关知识,其中主要介绍了Redis Cluster集群收缩主从节点的相关问题,包括了Cluster集群收缩概念、将6390主节点从集群中收缩、验证数据迁移过程是否导致数据异常等,希望对大家有帮助。

Redis实现排行榜及相同积分按时间排序功能的实现Redis实现排行榜及相同积分按时间排序功能的实现Aug 22, 2022 pm 05:51 PM

本篇文章给大家带来了关于redis的相关知识,其中主要介绍了Redis实现排行榜及相同积分按时间排序,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,希望对大家有帮助。

详细解析Redis中命令的原子性详细解析Redis中命令的原子性Jun 01, 2022 am 11:58 AM

本篇文章给大家带来了关于redis的相关知识,其中主要介绍了关于原子操作中命令原子性的相关问题,包括了处理并发的方案、编程模型、多IO线程以及单命令的相关内容,下面一起看一下,希望对大家有帮助。

一文搞懂redis的bitmap一文搞懂redis的bitmapApr 27, 2022 pm 07:48 PM

本篇文章给大家带来了关于redis的相关知识,其中主要介绍了bitmap问题,Redis 为我们提供了位图这一数据结构,位图数据结构其实并不是一个全新的玩意,我们可以简单的认为就是个数组,只是里面的内容只能为0或1而已,希望对大家有帮助。

实例详解Redis实现排行榜及相同积分按时间排序功能的实现实例详解Redis实现排行榜及相同积分按时间排序功能的实现Aug 26, 2022 pm 02:09 PM

本篇文章给大家带来了关于redis的相关知识,其中主要介绍了Redis实现排行榜及相同积分按时间排序,本文通过实例代码给大家介绍的非常详细,下面一起来看一下,希望对大家有帮助。

redis error什么意思redis error什么意思Jun 17, 2019 am 11:07 AM

redis error就是redis数据库和其组合使用的部件出现错误,这个出现的错误有很多种,例如Redis被配置为保存数据库快照,但它不能持久化到硬盘,用来修改集合数据的命令不能用。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版