導航:首頁 > 程序命令 > redis保存到硬碟命令

redis保存到硬碟命令

發布時間:2024-09-06 04:56:57

A. redis 兩種持久化分別叫什麼

 
 
Redis是一種高級key-value資料庫。它跟memcached類似,不過數據可以持久化,而且支持的數據類型很豐富。有字元串,鏈表,集
合和有序集合。支持在伺服器端計算集合的並,交和補集(difference)等,還支持多種排序功能。所以Redis也可以被看成是一個數據結構伺服器。
 
 
Redis的所有數據都是保存在內存中,然後不定期的通過非同步方式保存到磁碟上(這稱為「半持久化模式」);也可以把每一次數據變化都寫入到一個append
only
file(aof)裡面(這稱為「全持久化模式」)。
第一種方法filesnapshotting:默認redis是會以快照的形式將數據持久化到磁碟的(一個二進制文件,mp.rdb,這個文件名字可以指定),在配置文件中的格式是:save
N
M表示在N秒之內,redis至少發生M次修改則redis抓快照到磁碟。當然我們也可以手動執行save或者bgsave(非同步)做快照。
工作原理簡單介紹一下:當redis需要做持久化時,redis會fork一個子進程;子進程將數據寫到磁碟上一個臨時RDB文件中;當子進程完成寫臨時文件後,將原來的RDB替換掉,這樣的好處就是可以-on-write
還有一種持久化方法是Append-only:filesnapshotting方法在redis異常死掉時,最近的數據會丟失(丟失數據的多少視你save策略的配置),所以這是它最大的缺點,當業務量很大時,丟失的數據是很多的。Append-only方法可以做到全部數據不丟失,但redis的性能就要差些。AOF就可以做到全程持久化,只需要在配置文件中開啟(默認是no),appendonly
yes開啟AOF之後,redis每執行一個修改數據的命令,都會把它添加到aof文件中,當redis重啟時,將會讀取AOF文件進行「重放」以恢復到redis關閉前的最後時刻。
LOG
Rewriting隨著

B. redis常用命令是什麼

1、連接操作相關命令:



quit:關閉連接(connection)。
auth:簡單密碼認證。
2、value操作命令:

exists(key):確認key否存。
del(key):刪除key。

type(key):返值類型。



使用的注意事項

1、 Redis和Memcache都是將數據存放在內存中,都是內存資料庫。不過memcache還可用於緩存其他東西,例如圖片、視頻等等。

2、Redis不僅僅支持簡單的k/v類型的數據,同時還提供list,set,hash等數據結構的存儲。

3、虛擬內存–Redis當物理內存用完時,可以將一些很久沒用到的value 交換到磁碟 。

4、過期策略–memcache在set時就指定,例如set key1 0 0 8,即永不過期。Redis可以通過例如expire 設定,例如expire name 10 。




C. Redis RDB持久化和AOF持久化詳細講解

Redis支持RDB和AOF兩種持久化機制,持久化功能有效地避免因進程退出造成的數據丟失問題,當下次重啟時利用之前持久化的文件即可實現數據恢復。Redis支持兩種方式的持久化,一種是RDB方式,一種是AOF方式。可以單獨使用其中一種或將二者結合使用。

RDB持久化是把當前進程數據生成快照保存到硬碟的過程,觸發RDB持久化過程分為手動觸發和自動觸發。

手動觸發分別對應save和bgsave命令:

自動觸發

除了執行命令手動觸發之外,Redis內部還存在自動觸發RDB的持久化機制。如以下場景:

1)使用save相關配置,如「save m n」。表示m秒內數據集存在n次修改時,自動觸發bgsave。

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

3)執行debug reload命令重新載入Redis時,也會自動觸發save操作。

4)默認情況下執行shutdown命令時,如果沒有開啟AOF持久化功能則自動執行bgsave。

bgsave是主流的觸發RDB持久化方式,它的運作流程如下圖:

1)執行bgsave命令,Redis父進程判斷當前是否存在正在執行的子進程,如RDB/AOF子進程,如果存在bgsave命令直接返回。

2)父進程執行fork操作創建子進程,fork操作過程中父進程會阻塞,通過info stats命令查看latest_fork_usec選項,可以獲取最近一個fork操作的耗時,單位為微秒。

3)父進程fork完成後,bgsave命令返回「Background saving started」信息並不再阻塞父進程,可以繼續響應其他命令。

4)子進程創建RDB文件,根據父進程內存生成臨時快照文件,完成後對原有文件進行原子替換。執行lastsave命令可以獲取最後一次生成RDB的時間,對應info統計的rdb_last_save_time選項。

5)進程發送信號給父進程表示完成,父進程更新統計信息。

保存:RDB文件保存在dir配置指定的目錄下,文件名通過dbfilename配置指定。可以通過執行config set dir{newDir}和config setdbfilename{newFileName}運行期動態執行,當下次運行時RDB文件會保存到新目錄。

壓縮:Redis默認採用LZF演算法對生成的RDB文件做壓縮處理,壓縮後的文件遠遠小於內存大小,默認開啟,可以通過參數config set rdbcompression{yes|no}動態修改。

校驗:如果Redis載入損壞的RDB文件時拒絕啟動,並列印如下日誌:

這時可以使用Redis提供的redis-check-mp工具檢測RDB文件並獲取對應的錯誤報告。

RDB的優點:

RDB的缺點:

AOF(append only file)持久化:以獨立日誌的方式記錄每次寫命令,重啟時再重新執行AOF文件中的命令達到恢復數據的目的。AOF的主要作用是解決了數據持久化的實時性,目前已經是Redis持久化的主流方式。

開啟AOF功能需要設置配置:appendonly yes,默認不開啟。AOF文件名通過appendfilename配置設置,默認文件名是appendonly.aof。保存路徑同RDB持久化方式一致,通過dir配置指定。

AOF的工作流程操作:命令寫入(append)、文件同步(sync)、文件重寫(rewrite)、重啟載入(load)。如下圖所示:

流程如下:

1)所有的寫入命令會追加到aof_buf(緩沖區)中。

2)AOF緩沖區根據對應的策略向硬碟做同步操作。

3)隨著AOF文件越來越大,需要定期對AOF文件進行重寫,達到壓縮的目的。

4)當Redis伺服器重啟時,可以載入AOF文件進行數據恢復。

AOF命令寫入的內容直接是文本協議格式,開啟AOF後,所有寫入命令都包含追加操作,直接採用文本協議格式,避免了二次處理開銷。

Redis提供了多種AOF緩沖區同步文件策略,由參數appendfsync控制。

always:命令寫入aof_buf後,調用系統ysnyc操作同步到AOF文件,ysnyc完成後線程返回。

everysec:命令寫入aof_buf後,調用系統write操作,write完成後線程返回。ysnyc同步文件操作由專門線程每秒調用一次。

no:命令寫入aof_buf後,調用系統write操作,不對AOF文件做ysnyc同步,同步硬碟操作由操作系統負責,通常同步周期最長30秒。

系統調用write和fsync說明:

Redis引入AOF重寫機制壓縮文件體積。AOF文件重寫是把Redis進程內的數據轉化為寫命令同步到新AOF文件的過程。

AOF重寫機制壓縮文件體積的原因:

1)進程內已經超時的數據不再寫入文件。

2)舊的AOF文件含有無效命令,重寫使用進程內數據直接生成,這樣新的AOF文件只保留最終數據的寫入命令。

3)多條寫命令可以合並為一個,為了防止單條命令過大造成客戶端緩沖區溢出,對於list、set、hash、zset等類型操作,以64個元素為界拆分為多條。

AOF重寫過程可以手動觸發和自動觸發:

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。其中aof_current_size和aof_base_size可以在info Persistence統計信息中查看。

AOF重寫流程:如下圖

流程說明:

1)執行AOF重寫請求。如果當前進程正在執行AOF重寫,請求不執行並返回如下響應:

如果當前進程正在執行bgsave操作,重寫命令延遲到bgsave完成之後再執行,返回如下響應:

2)父進程執行fork創建子進程,開銷等同於bgsave過程。

3.1)主進程fork操作完成後,繼續響應其他命令。所有修改命令依然寫入AOF緩沖區並根據appendfsync策略同步到硬碟,保證原有AOF機制正確性。

3.2)由於fork操作運用寫時復制技術,子進程只能共享fork操作時的內存數據。由於父進程依然響應命令,Redis使用「AOF重寫緩沖區」保存這部分新數據,防止新AOF文件生成期間丟失這部分數據。

4)子進程根據內存快照,按照命令合並規則寫入到新的AOF文件。每次批量寫入硬碟數據量由配置aof-rewrite-incremental-fsync控制,默認為32MB,防止單次刷盤數據過多造成硬碟阻塞。

5.1)新AOF文件寫入完成後,子進程發送信號給父進程,父進程更新統計信息,具體見info persistence下的aof_*相關統計。

5.2)父進程把AOF重寫緩沖區的數據寫入到新的AOF文件。

5.3)使用新AOF文件替換老文件,完成AOF重寫。

AOF和RDB文件都可以用於伺服器重啟時的數據恢復。Redis持久化文件載入流程如下圖:

流程說明:

1)AOF持久化開啟且存在AOF文件時,優先載入AOF文件,列印如下日誌:

2)AOF關閉或者AOF文件不存在時,載入RDB文件,列印如下日誌:

3)載入AOF/RDB文件成功後,Redis啟動成功。

4)AOF/RDB文件存在錯誤時,Redis啟動失敗並列印錯誤信息。

載入損壞的AOF文件時會拒絕啟動,並列印如下日誌:

對於錯誤格式的AOF文件,先進行備份,然後採用redis-check-aof--fix命令進行修復,修復後使用diff-u對比數據的差異,找出丟失的數據,有些可以人工修改補全。

AOF文件可能存在結尾不完整的情況,Redis為我們提供了aof-load-truncated配置來兼容這種情況,默認開啟。載入AOF時,當遇到此問題時會忽略並繼續啟動,同時列印如下警告日誌:

D. Redis和Memcache的區別總結

區別:

1、存儲方式不同

memecache 把數據全部存在內存之中,斷電後會掛掉,數據不能超過內存大小;redis有部份存在硬碟上,這樣能保證數據的持久性,支持數據的持久化(筆者註:有快照和AOF日誌兩種持久化方式,在實際應用的時候,要特別注意配置文件快照參數,要不就很有可能伺服器頻繁滿載做mp)。

2、數據支持類型不同

redis在數據支持上要比memecache多的多。

3、使用底層模型不同

新版本的redis直接自己構建了VM 機制 ,因為一般的系統調用系統函數的話,會浪費一定的時間去移動和請求。

4、運行環境不同

redis目前官方只支持LINUX 上去行,從而省去了對於其它系統的支持,這樣的話可以更好的把精力用於本系統 環境上的優化,雖然後來微軟有一個小組為其寫了補丁。但是沒有放到主幹上。

(4)redis保存到硬碟命令擴展閱讀

注意事項

1、 Redis和Memcache都是將數據存放在內存中,都是內存資料庫。不過memcache還可用於緩存其他東西,例如圖片、視頻等等。

2、Redis不僅僅支持簡單的k/v類型的數據,同時還提供list,set,hash等數據結構的存儲。

3、虛擬內存–Redis當物理內存用完時,可以將一些很久沒用到的value 交換到磁碟 。

4、過期策略–memcache在set時就指定,例如set key1 0 0 8,即永不過期。Redis可以通過例如expire 設定,例如expire name 10 。

5、分布式–設定memcache集群,利用magent做一主多從;redis可以做一主多從。都可以一主一,存儲數據安全–memcache掛掉後,數據沒了;redis可以定期保存到磁碟(持久化) 。

閱讀全文

與redis保存到硬碟命令相關的資料

熱點內容
平板電腦加密失敗後玩不了 瀏覽:710
狂人c程序員入門必備 瀏覽:705
台灣伺服器域名是什麼雲空間 瀏覽:901
單片機程序電子版 瀏覽:599
路由器加密模式只有wpa2 瀏覽:530
ug刪除加密 瀏覽:433
安卓手機如何下載最低版本的抖音 瀏覽:778
sprint演算法 瀏覽:445
數控編程學習資料 瀏覽:177
pdf語文 瀏覽:943
單片機小學比賽 瀏覽:95
條件預編譯多條件 瀏覽:394
物理學好可以當程序員嗎 瀏覽:435
jsp圖片網站源碼 瀏覽:845
美股開盤加密貨幣大跌 瀏覽:18
ubuntuphp伺服器 瀏覽:189
伺服器編輯器如何寫 瀏覽:384
我有一套源碼自帶採集 瀏覽:112
對稱加密演算法的特點 瀏覽:47
河池看房用什麼app 瀏覽:283