redis默認持久化是否開啟
??? Redis是一種高級key-value數(shù)據(jù)庫。它跟memcached類似,不過數(shù)據(jù)可以持久化,而且支持的數(shù)據(jù)類型很豐富。有字符串,鏈表,集 合和有序集合。支持在服務(wù)器端計算集合的并,交和補集(difference)等,還支持多種排序功能。所以Redis也可以被看成是一個數(shù)據(jù)結(jié)構(gòu)服務(wù) 器。
Redis的所有數(shù)據(jù)都是保存在內(nèi)存中,然后不定期的通過異步方式保存到磁盤上(這稱為“半持久化模式”);也可以把每一次數(shù)據(jù)變化都寫入到一個append only file(aof)里面(這稱為“全持久化模式”)。?
????由于Redis的數(shù)據(jù)都存放在內(nèi)存中,如果沒有配置持久化,redis重啟后數(shù)據(jù)就全丟失了,于是需要開啟redis的持久化功能,將數(shù)據(jù)保存到磁盤上,當redis重啟后,可以從磁盤中恢復(fù)數(shù)據(jù)。redis提供兩種方式進行持久化,一種是RDB持久化(原理是將Reids在內(nèi)存中的數(shù)據(jù)庫記錄定時dump到磁盤上的RDB持久化),另外一種是AOF(append only file)持久化(原理是將Reids的操作日志以追加的方式寫入文件)。那么這兩種持久化方式有什么區(qū)別呢,改如何選擇呢?網(wǎng)上看了大多數(shù)都是介紹這兩種方式怎么配置,怎么使用,就是沒有介紹二者的區(qū)別,在什么應(yīng)用場景下使用。
2、二者的區(qū)別
RDB持久化是指在指定的時間間隔內(nèi)將內(nèi)存中的數(shù)據(jù)集快照寫入磁盤,實際操作過程是fork一個子進程,先將數(shù)據(jù)集寫入臨時文件,寫入成功后,再替換之前的文件,用二進制壓縮存儲。

?
AOF持久化以日志的形式記錄服務(wù)器所處理的每一個寫、刪除操作,查詢操作不會記錄,以文本的方式記錄,可以打開文件看到詳細的操作記錄。

?
眾所周知,redis是內(nèi)存數(shù)據(jù)庫,它把數(shù)據(jù)存儲在內(nèi)存中,這樣在加快讀取速度的同時也對數(shù)據(jù)安全性產(chǎn)生了新的問題,即當redis所在服務(wù)器發(fā)生宕機后,redis數(shù)據(jù)庫里的所有數(shù)據(jù)將會全部丟失。
為了解決這個問題,redis提供了持久化功能。通俗的講就是將內(nèi)存中的數(shù)據(jù)寫入硬盤中。
Redis 提供了多種不同級別的持久化方式:
1、RDB 持久化可以在指定的時間間隔內(nèi)生成數(shù)據(jù)集的時間點快照(point-in-time snapshot)。
2、AOF 持久化記錄服務(wù)器執(zhí)行的所有寫操作命令,并在服務(wù)器啟動時,通過重新執(zhí)行這些命令來還原數(shù)據(jù)集。AOF 文件中的命令全部以 Redis 協(xié)議的格式來保存,新命令會被追加到文件的末尾。Redis 還可以在后臺對 AOF 文件進行重寫(rewrite),使得 AOF 文件的體積不會超出保存數(shù)據(jù)集狀態(tài)所需的實際大小。
3、Redis 還可以同時使用 AOF 持久化和 RDB 持久化。在這種情況下, 當 Redis 重啟時, 它會優(yōu)先使用 AOF 文件來還原數(shù)據(jù)集, 因為 AOF 文件保存的數(shù)據(jù)集通常比 RDB 文件所保存的數(shù)據(jù)集更完整。
4、關(guān)閉持久化功能,。讓數(shù)據(jù)只存在內(nèi)存里面,重啟就沒了。
Redis的RDB持久化(RDB默認是啟動的)
1.Snapshotting:
缺省情況下,Redis會將數(shù)據(jù)集的快照dump到dump.rdb文件中。此外,我們也可以通過配置文件來修改Redis服務(wù)器dump快照的頻率,在打開redis.conf文件之后,我們搜索save,可以看到下面的配置信息:
save 900 1 #在900秒(15分鐘)之后,如果至少有1個key發(fā)生變化,則dump內(nèi)存快照。
save 300 10 #在300秒(5分鐘)之后,如果至少有10個key發(fā)生變化,則dump內(nèi)存快照。
save 60 10000 #在60秒(1分鐘)之后,如果至少有10000個key發(fā)生變化,則dump內(nèi)存快照。
2. Dump快照的機制:
1). Redis先fork子進程。
2). 子進程將快照數(shù)據(jù)寫入到臨時RDB文件中。
3). 當子進程完成數(shù)據(jù)寫入操作后,再用臨時文件替換老的文件。
4、常用配置
RDB持久化配置
Redis會將數(shù)據(jù)集的快照dump到dump.rdb文件中。此外,我們也可以通過配置文件來修改Redis服務(wù)器dump快照的頻率,在打開6379.conf文件之后,我們搜索save,可以看到下面的配置信息:
save 900 1 ???????????? #在900秒(15分鐘)之后,如果至少有1個key發(fā)生變化,則dump內(nèi)存快照。
save 300 10??????????? #在300秒(5分鐘)之后,如果至少有10個key發(fā)生變化,則dump內(nèi)存快照。
save 60 10000??????? #在60秒(1分鐘)之后,如果至少有10000個key發(fā)生變化,則dump內(nèi)存快照。
AOF持久化配置
在Redis的配置文件中存在三種同步方式,它們分別是:
appendfsync always ??? #每次有數(shù)據(jù)修改發(fā)生時都會寫入AOF文件。
appendfsync everysec ?#每秒鐘同步一次,該策略為AOF的缺省策略。
appendfsync no ???????? #從不同步。高效但是數(shù)據(jù)不會被持久化。

