首頁 資料庫 Redis redis進行持久化有哪兩種方式

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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

redis集群模式怎麼搭建 redis集群模式怎麼搭建 Apr 10, 2025 pm 10:15 PM

Redis集群模式通過分片將Redis實例部署到多個服務器,提高可擴展性和可用性。搭建步驟如下:創建奇數個Redis實例,端口不同;創建3個sentinel實例,監控Redis實例並進行故障轉移;配置sentinel配置文件,添加監控Redis實例信息和故障轉移設置;配置Redis實例配置文件,啟用集群模式並指定集群信息文件路徑;創建nodes.conf文件,包含各Redis實例的信息;啟動集群,執行create命令創建集群並指定副本數量;登錄集群執行CLUSTER INFO命令驗證集群狀態;使

redis怎麼讀取隊列 redis怎麼讀取隊列 Apr 10, 2025 pm 10:12 PM

要從 Redis 讀取隊列,需要獲取隊列名稱、使用 LPOP 命令讀取元素,並處理空隊列。具體步驟如下:獲取隊列名稱:以 "queue:" 前綴命名,如 "queue:my-queue"。使用 LPOP 命令:從隊列頭部彈出元素並返回其值,如 LPOP queue:my-queue。處理空隊列:如果隊列為空,LPOP 返回 nil,可先檢查隊列是否存在再讀取元素。

redis數據怎麼清空 redis數據怎麼清空 Apr 10, 2025 pm 10:06 PM

如何清空 Redis 數據:使用 FLUSHALL 命令清除所有鍵值。使用 FLUSHDB 命令清除當前選定數據庫的鍵值。使用 SELECT 切換數據庫,再使用 FLUSHDB 清除多個數據庫。使用 DEL 命令刪除特定鍵。使用 redis-cli 工具清空數據。

centos redis如何配置Lua腳本執行時間 centos redis如何配置Lua腳本執行時間 Apr 14, 2025 pm 02:12 PM

在CentOS系統上,您可以通過修改Redis配置文件或使用Redis命令來限制Lua腳本的執行時間,從而防止惡意腳本佔用過多資源。方法一:修改Redis配置文件定位Redis配置文件:Redis配置文件通常位於/etc/redis/redis.conf。編輯配置文件:使用文本編輯器(例如vi或nano)打開配置文件:sudovi/etc/redis/redis.conf設置Lua腳本執行時間限制:在配置文件中添加或修改以下行,設置Lua腳本的最大執行時間(單位:毫秒)

redis命令行怎麼用 redis命令行怎麼用 Apr 10, 2025 pm 10:18 PM

使用 Redis 命令行工具 (redis-cli) 可通過以下步驟管理和操作 Redis:連接到服務器,指定地址和端口。使用命令名稱和參數向服務器發送命令。使用 HELP 命令查看特定命令的幫助信息。使用 QUIT 命令退出命令行工具。

redis過期策略怎麼設置 redis過期策略怎麼設置 Apr 10, 2025 pm 10:03 PM

Redis數據過期策略有兩種:定期刪除:定期掃描刪除過期鍵,可通過 expired-time-cap-remove-count、expired-time-cap-remove-delay 參數設置。惰性刪除:僅在讀取或寫入鍵時檢查刪除過期鍵,可通過 lazyfree-lazy-eviction、lazyfree-lazy-expire、lazyfree-lazy-user-del 參數設置。

如何優化debian readdir的性能 如何優化debian readdir的性能 Apr 13, 2025 am 08:48 AM

在Debian系統中,readdir系統調用用於讀取目錄內容。如果其性能表現不佳,可嘗試以下優化策略:精簡目錄文件數量:盡可能將大型目錄拆分成多個小型目錄,降低每次readdir調用處理的項目數量。啟用目錄內容緩存:構建緩存機制,定期或在目錄內容變更時更新緩存,減少對readdir的頻繁調用。內存緩存(如Memcached或Redis)或本地緩存(如文件或數據庫)均可考慮。採用高效數據結構:如果自行實現目錄遍歷,選擇更高效的數據結構(例如哈希表而非線性搜索)存儲和訪問目錄信

redis計數器怎麼實現 redis計數器怎麼實現 Apr 10, 2025 pm 10:21 PM

Redis計數器是一種使用Redis鍵值對存儲來實現計數操作的機制,包含以下步驟:創建計數器鍵、增加計數、減少計數、重置計數和獲取計數。 Redis計數器的優勢包括速度快、高並發、持久性和簡單易用。它可用於用戶訪問計數、實時指標跟踪、遊戲分數和排名以及訂單處理計數等場景。

See all articles