Reds3配置文件详解
筆記:
1.#本機地址一定要放在后面,不然redis-cli客戶端連接不上
??????? bind 192.168.92.136 127.0.0.1
2.# 如果開啟保護模式,而且沒有綁定監聽的ip 和訪問的密碼,則只能那在本地訪問
以下部分轉賬自:http://blog.csdn.net/anxpp/article/details/51171317
本文會總結Redis的整個配置,并附上示例。
概述
Redis可以在沒有配置文件的情況下通過內置的配置來啟動,但是這種啟動方式只適用于開發和測試。 合理的配置Redis的方式是提供一個Redis配置文件,這個文件通常叫做 redis.conf。 redis.conf文件中包含了很多格式簡單的指令如下:
keyword argument1 argument2 ... argumentN
如果參數中有空格,機上“"”雙引號即可。
配置方式
Redis支持多種配置方式。
1、通過命令行參數配置
這種方式既是在啟動服務時將配置命令以參數形式傳入:
./redis-server --port 6380 --slaveof 127.0.0.1 6379
這里配置一個新運行并以 6380 為端口的Redis實例,使配置它為 127.0.0.1:6379 Redis實例的slave。
通過命令行傳遞的配置參數的格式和在redis.conf中設置的配置參數的格式完全一樣, 唯一不同的是需要在關鍵字之前加上 前綴--。
需要注意的是通過命令行傳遞參數的過程會在內存中生成一個臨時的配置文件(也許會直接追加在命令指定的配置文件后面),這些傳遞的參數也會轉化為跟Redis配置文件一樣的形式。
2、運行時配置更改
Redis允許在運行的過程中,在不重啟服務器的情況下更改服務器配置,同時也支持 使用特殊的 CONFIG SET 和 CONFIG GET 命令用編程方式查詢并設置配置。
并非所有的配置指令都支持這種使用方式,但是大部分是支持的。
更多相關的信息請查閱博客中配置命令相關文章。
需要確保的是在通過CONFIG SET命令進行的設置的同時,也需在redis.conf文件中進行了相應的更改。
Redis2.8開始提供一個CONFIG REWRITE命令在不更改現有配置文件的同時, 根據當下的服務器配置對redis.conf文件進行重寫。
配置詳解
需要注意的是,為了讀取配置文件,Redis的必須與作為第一個參數的文件路徑開始(路徑以配置文件實際路徑位置,下面采用默認路徑):
#./redis-server ../redis.conf
配置內存時請注意單位:
1k => 1000 bytes
1kb => 1024 bytes
1m => 1000000 bytes
1mb => 1024*1024 bytes
1g => 1000000000 bytes
1gb => 1024*1024*1024 bytes
不區分大小寫。
Include one or more other config files here. This is useful if you have a standard template that goes to all Redis servers but also need to customize a few per-server settings. Include files can include other files, so use this wisely.
Notice option "include" won't be rewritten by command "CONFIG REWRITE" from admin or Redis Sentinel. Since Redis always uses the last processed line as value of a configuration directive, you'd better put includes at the beginning of this file to avoid overwriting config change at runtime.
If instead you are interested in using includes to override configuration options, it is better to use include as the last line.
#include /path/to/local.conf
#include /path/to/other.conf
下面的配置示例,若寫在描述前表示默認配置,否則為無默認配置或其他情況。
1、通用配置
配置Redis一些最基本的屬性。
(1)后臺程序
daemonize no
配置Redis是否作為后臺程序運行,如果需要,配置為”yes“即可(當運行多個 redis 服務時,需要指定不同的 pid 文件和端口)。
(2)pid文件
pidfile /var/run/redis.pid
當以后臺程序運行的時候,Redis在/var/run/redis.pid默認寫入一個pid文件。可以在這里指定自定義pid文件的位置。
(3)TCP端口
port 6379
接受指定端口上的連接,默認為6379.端口指定為0的Redis不會監聽TCP套接字。
(4)tcp-backlog
tcp-backlog 511
此參數確定了TCP連接中已完成隊列(完成三次握手之后)的長度, 當然此值必須不大于Linux系統定義的/proc/sys/net/core/somaxconn值,默認是511,而Linux的默認參數值是128。當系統并發量大并且客戶端速度緩慢的時候,可以將這二個參數一起參考設定。
(5)指定可接收請求的IP地址
bind [ip...]
默認的Redis監聽來自所有的服務器上可用的網絡接口的連接,可以設置一個或多個IP地址:
bind 192.168.1.100 10.0.0.1
bind 127.0.0.1
(6) Unix套接字監聽
應該是用于進程間通信的,此處沒有深究。
指定將用于偵聽傳入連接的Unix套接字的路徑。沒有默認,所以沒有指定時Redis不會監聽Unix套接字。
配置:
unixsocket /tmp/redis.sock
unixsocketperm 700
(7)客戶端連接超時
timeout 0
客戶端和Redis服務端的連接超時時間,單位為秒。默認是0,表示永不超時。
(8)客戶端連接檢測
tcp-keepalive 0
如果值非0,單位是秒,表示將周期性的使用SO_KEEPALIVE檢測客戶端是否還處于健康狀態,避免服務器一直阻塞,官方給出的建議值是60S。
兩個原因:
檢測死同行。
取出可用的連接。
在Linux上,指定的值(以秒為單位)是用于發送ACK的時期。請注意,關閉連接需要兩倍的時間。在其它內核的周期取決于內核配置。
(9)日志記錄等級
loglevel notice
共有4個等級:
Debug:記錄很多信息,用于開發和測試
Varbose:有用的信息,不像debug會記錄那么多
Notice:普通的verbose,常用于生產環境
Warning:只有非常重要或者嚴重的信息會記錄到日志
(10)日志目錄
# logfile ""
logfile stdout
配置 log 文件地址,默認打印在命令行終端的窗口上,也可設為/dev/null屏蔽日志。
另外,空字符串可以用來強制Redis使用標準輸出。請注意,如果您使用標準輸出但Redis以后臺運行,日志將被發送到/dev/null。
(11)記錄到系統日志
syslog-enabled no
可以將日志記錄到系統日志,將值設置為yes即可。
(12)指定系統日志身份
如下設置:
syslog-ident redis
(13)指定系統日志設備
必須為USER或LOCAL0-LOCAL7中的一個值:
syslog-facility local0
(14)設置數據庫數量
databases 16
默認為16個(0~15),默認使用DB 0,可以通過SELECT [0~數據庫數量-1]來選擇要使用的數據庫。
2、數據持久化 RDB
RDB 的優點:
RDB 是一個非常緊湊(compact)的文件,它保存了 Redis 在某個時間點上的數據集。 這種文件非常適合用于進行備份: 比如說,你可以在最近的 24 小時內,每小時備份一次 RDB 文件,并且在每個月的每一天,也備份一個 RDB 文件。 這樣的話,即使遇上問題,也可以隨時將數據集還原到不同的版本。RDB 非常適用于災難恢復(disaster recovery):它只有一個文件,并且內容都非常緊湊,可以(在加密后)將它傳送到別的數據中心,或者亞馬遜 S3 中。RDB 可以最大化 Redis 的性能:父進程在保存 RDB 文件時唯一要做的就是 fork 出一個子進程,然后這個子進程就會處理接下來的所有保存工作,父進程無須執行任何磁盤 I/O 操作。RDB 在恢復大數據集時的速度比 AOF 的恢復速度要快。
RDB 的缺點:
如果你需要盡量避免在服務器故障時丟失數據,那么 RDB 不適合你。 雖然 Redis 允許你設置不同的保存點(save point)來控制保存 RDB 文件的頻率, 但是, 因為RDB 文件需要保存整個數據集的狀態, 所以它并不是一個輕松的操作。 因此你可能會至少 5 分鐘才保存一次 RDB 文件。 在這種情況下, 一旦發生故障停機, 你就可能會丟失好幾分鐘的數據。每次保存 RDB 的時候,Redis 都要 fork() 出一個子進程,并由子進程來進行實際的持久化工作。 在數據集比較龐大時, fork() 可能會非常耗時,造成服務器在某某毫秒內停止處理客戶端; 如果數據集非常巨大,并且 CPU 時間非常緊張的話,那么這種停止時間甚至可能會長達整整一秒。 雖然 AOF 重寫也需要進行 fork() ,但無論 AOF 重寫的執行間隔有多長,數據的耐久性都不會有任何損失。
將數據庫快照保存到磁盤。
(1)保存策略
save <時間> <改變的數量>
比如save 300 10,表示300s后至少有10個key發生改變就觸發持久化事件,可以配置多個策略。
注釋掉所有save即可禁用持久化功能。
可以通過如下配置(空字符串)刪除所有之前配置的保存點:
save ""
(2)持久化出錯
stop-writes-on-bgsave-error no
當持久化出現錯誤之后,是否繼續提供寫服務,若需繼續提供,配置為yes即可。
默認的Redis將停止接受寫入如果RDB快照啟用了(至少有一個保存點)并且最近的后臺保存失敗。這會使用戶指定數據沒有正確的保存到硬盤上,否則,沒人會注意到這些問題,就會出現更大的問題!
(3)持久化時是否壓縮
rdbcompression yes
是否使用LZF壓縮字符串對象,默認為yes(綜合考慮yes更佳),即壓縮后保存。
如果想節約一點點cpu資源,可設置為no,但會占用更大的存儲空間。
(4)支持CRC64校驗
rdbchecksum yes
讀取和寫入的時候是否支持CRC64校驗,默認是開啟的。這會一定程度上影響性能,但是可以關閉它。
(5)持久化文件名
dbfilename dump.rdb
(6)持久化文件存放路徑
dir ./
只能配置為目錄(而不是文件)。
3、主從配置
Redis能很好的支持和配置數據庫主從復制。
使用 slaveof,使Redis實例稱為另一個Redis服務器的副本。
需要知曉幾點:
主從復制是異步的
支持部分同步
連接斷開會自動重連
(1)配置從服務
slaveof <masterip> <masterport>
參數為主服務器的ip和端口
(2)密碼驗證
masterauth <master-password>
如果主服務器設置了密碼驗證,需要在開始復制前進行身份驗證,否則主服務器會拒絕連接請求。
(3)主從連接斷開處理
slave-serve-stale-data yes
當slave丟失與master的連接時,或slave仍然在于master進行數據同步時(未與master保持一致)slave可有兩種方式來響應客戶端請求:
如果 slave-serve-stale-data 設置成 'yes'(默認),slave仍會響應客戶端請求,此時可能會有問題
如果 slave-serve-stale-data 設置成 'no',slave會返回"SYNC with master in progress"錯誤信息,但 INFO 和SLAVEOF命令除外。
(4)從服務器是否只讀
slave-read-only yes
你可以配置一個從實例接受寫入與否。寫對一個從實例可能是存儲一些臨時數據(因為寫在從屬數據將與主機同步后容易刪除)有用的,但也可能導致如果客戶因為錯誤配置的寫入它的問題。
Redis的2.6開始,默認的從服務器是只讀的。
注:只讀slave沒有設計被暴露在不受信任的客戶在互聯網上。這只是對實例的誤操作的保護層。還是只讀從動出口在默認情況下所有的行政指令,如CONFIG,調試等等。要在有限的范圍內,可以使用“rename-command”暗影所有行政/危險命令提高只讀奴隸的安全性。
(5)同步策略
repl-diskless-sync no
新的slave和重新連接的slave是不能繼續接收差異復制,需要做“完全同步”。 RDB文件是主到從的傳送。發送可以以兩種不同的方式發生:
磁盤備份(默認):Redis的主服務器創建一個新的進程,在磁盤上寫入文件RDB。然后由父進程以增量的方式傳輸到slave。
無盤:Redis的主創建一個新的進程,直接寫入RDB文件到slave的socket。不經過硬盤盒主進程。
基于硬盤的話,RDB文件創建后,一旦創建完畢,可以同時服務更多的slave。基于socket的話, 新slave來了后,得排隊(如果超出了repl-diskless-sync-delay還沒來),完事兒一個再進行下一個。
當用diskless的時候,master等待一個repl-diskless-sync-delay的秒數,如果沒slave來的話,就直接傳,后來的得排隊等了。否則就可以一起傳。
由于現在帶寬已經很大了,對于緩慢的硬盤,無盤備份效果會更好。
(6)無盤同步延遲時間
repl-diskless-sync-delay 5
單位為秒,設為0時可以禁用,傳輸會馬上的開始。
(7)slave ping設置
repl-ping-slave-period 10
Slave發送ping給master。默認10s。
(8)復制超時設置
repl-timeout 60
超時時間,包括從master看slave,從slave看master,要大于上邊的repl-ping-slave-period。
(9)同步完畢后是否關閉TCP_NODELAY
repl-disable-tcp-nodelay no
SYNC完畢后,在slave的socket里關閉TCP_NODELAY。
如果是yes,reids發送少量的TCP包給slave,但可能導致最高40ms的數據延遲。
如果是no,那可能在復制的時候,會消耗 少量帶寬。
默認為了低延遲優化而設置成no,如果主從之間有很多網絡跳躍。就設置成yes。
(10)設置backlog的大小
repl-backlog-size 1mb
復制集后臺backlog大小。
越大,slave可以丟失的時間就越長。
(11)backlog釋放時間設置
repl-backlog-ttl 3600
從最后一個slave斷開連接后,多久釋放backlog,當確認master不再需要slave的時候,多久釋放。0是永遠不釋放。
(12)次主服務器配置
slave-priority 100
當master不可用,Sentinel會根據slave的優先級選舉一個master。最低的優先級的slave,當選master。而配置成0,永遠不會被選舉(必須≥0)。默認是100。
(13)slave在線數及延遲設置
min-slaves-to-write 0
min-slaves-max-lag 10
slave小于幾個,網絡lag(延遲)大于幾秒的時候,master停止接受write請求。為0時表示禁用功能。所以默認為不限制slave數量,網絡延遲設置為10s。
4、安全配置
(1)設置密碼
多數情況下無需密碼鑒別slave。同時,由于redis處理速度太快,所以爆破速率可達150K/S。所以如果你要設置密碼,必須設置超強的密碼:
requirepass password
(2)命令重命名
可以對一些對于安全比較重要的命令重命名,比如CONFIG:
rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
這樣,只有內部知道命令該如何使用,當然,也可以使用如下方式完全屏蔽一個命令:
rename-command CONFIG ""
記錄進AOF或者傳給slave的重命名操作可能會引發問題!
5、限制相關配置
(1)客戶端數量
maxclients 10000
設置最大client連接數。默認10000個。如果redis沒法控制最大文件數,則給到最低32。
如果達到了限制,Redis會返回一個錯誤:客戶端數量已經達到最大了。
(2)最大內存設置
maxmemory [bytes]
不要超過指定的字節數量使用更多的內存。當達到內存限制的Redis將嘗試根據所選的驅逐策略刪除key。
如果配置成了noeviction。所有write都會拒絕,比如set,lpush等。所有讀請求可以接受。
主要用在把redis作為LRU緩存時,或者用在一個內存吃緊又不能刪除的策略上。
如果你有slave,你應該把最大內存別設置的太大,留一些內存給slave output buffers(如果是noeviction策略,就無需這樣設置了)。
(3)內存策略配置
maxmemory-policy noeviction
volatile-lru ->用LRU刪除設置了ttl的key
allkeys-lru ->用LRU刪除任何key
volatile-random ->隨機刪除有ttl的key
allkeys-random ->隨機刪除任何key
volatile-ttl ->刪除即將ttl到期的key
noeviction ->不刪,有write的時候報錯
這些操作會返回錯誤: set setnx setex append incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby getset mset msetnx exec sort
(4)刪除設置
maxmemory-samples 5
LRU和最小TTL并不是最精確的,但是也差不多。默認redis每次取5個key然后取最符合刪除策略的刪除。可以配置這個數,越低,刪除的東西就會越多,刪除也越快。比如設置100個,就能刪百分之一,但是較慢,會占用更多cpu資源。
6、數據持久化 AOF(APPEND ONLY MODE:追加模式)
AOF 的優點:
使用 AOF 持久化會讓 Redis 變得非常耐久(much more durable):你可以設置不同的 fsync 策略,比如無 fsync ,每秒鐘一次 fsync ,或者每次執行寫入命令時 fsync 。 AOF 的默認策略為每秒鐘 fsync 一次,在這種配置下,Redis 仍然可以保持良好的性能,并且就算發生故障停機,也最多只會丟失一秒鐘的數據( fsync 會在后臺線程執行,所以主線程可以繼續努力地處理命令請求)。AOF 文件是一個只進行追加操作的日志文件(append only log), 因此對 AOF 文件的寫入不需要進行 seek , 即使日志因為某些原因而包含了未寫入完整的命令(比如寫入時磁盤已滿,寫入中途停機,等等), redis-check-aof 工具也可以輕易地修復這種問題。 Redis 可以在 AOF 文件體積變得過大時,自動地在后臺對 AOF 進行重寫: 重寫后的新 AOF 文件包含了恢復當前數據集所需的最小命令集合。 整個重寫操作是絕對安全的,因為 Redis 在創建新 AOF 文件的過程中,會繼續將命令追加到現有的 AOF 文件里面,即使重寫過程中發生停機,現有的 AOF 文件也不會丟失。 而一旦新 AOF 文件創建完畢,Redis 就會從舊 AOF 文件切換到新 AOF 文件,并開始對新 AOF 文件進行追加操作。AOF 文件有序地保存了對數據庫執行的所有寫入操作, 這些寫入操作以 Redis 協議的格式保存, 因此 AOF 文件的內容非常容易被人讀懂, 對文件進行分析(parse)也很輕松。 導出(export) AOF 文件也非常簡單: 舉個例子, 如果你不小心執行了 FLUSHALL 命令, 但只要 AOF 文件未被重寫, 那么只要停止服務器, 移除 AOF 文件末尾的 FLUSHALL 命令, 并重啟 Redis , 就可以將數據集恢復到 FLUSHALL 執行之前的狀態。
AOF 的缺點:
對于相同的數據集來說,AOF 文件的體積通常要大于 RDB 文件的體積。根據所使用的 fsync 策略,AOF 的速度可能會慢于 RDB 。 在一般情況下, 每秒 fsync 的性能依然非常高, 而關閉 fsync 可以讓 AOF 的速度和 RDB 一樣快, 即使在高負荷之下也是如此。 不過在處理巨大的寫入載入時,RDB 可以提供更有保證的最大延遲時間(latency)。AOF 在過去曾經發生過這樣的 bug : 因為個別命令的原因,導致 AOF 文件在重新載入時,無法將數據集恢復成保存時的原樣。 (舉個例子,阻塞命令 BRPOPLPUSH 就曾經引起過這樣的 bug 。) 測試套件里為這種情況添加了測試: 它們會自動生成隨機的、復雜的數據集, 并通過重新載入這些數據來確保一切正常。 雖然這種 bug 在 AOF 文件中并不常見, 但是對比來說, RDB 幾乎是不可能出現這種 bug 的。
(1)是否啟用AOF
appendonly no
默認情況下Redis異步轉儲磁盤上的數據集。這種模式很多時候都是挺好的,但如果Redis運行出現問題或停電可能造成幾分鐘的寫入丟失(根據配置的保存點)。
AOF提供更好模式。比如用默認的AOF,redis只丟失最近一秒的數據(斷電情況),或者最后一個write操作(redis自身錯誤,os正常)。每個write操作寫一次AOF。
當AOF文件太大了,redis會自動重寫一個AOF文件出來。
AOF和RDB可以同時啟用,沒有任何沖突。AOF會優先被用來恢復數據。
更多信息可以訪問:http://redis.io/topics/persistence
開啟AOF:
appendonly yes
(2)AOF文件名
appendfilename "appendonly.aof"
此為默認的文件名,當然也可以自定義。
(3)fsync模式
appendfsync everysec
有三種:
no:讓OS托管,這樣更快,但是如果出現問題,可能會丟失更多的數據。
always:每次write都刷到log,慢,但是對數據來說最安全。
everysec:每秒一次flush(默認),這是一種折衷的做法,使速度和數據安全之間取得適當的平衡。
(4)AOF設置
no-appendfsync-on-rewrite no
當fsync為always或者everysec時,一個bgsave或者AOF rewrite線程正在耗費大量I/0,redis可能會在fsync上阻塞很久。發生之后就無法fix,即使是另一個線程跑fsync,也會阻塞我們同步的write方法。
如下方法可以解決這個問題:當bgsave()或bgrewriteaof()在跑,主進程的fsync()就無法調用。也就是當子進程在save,那段時間相當于redis是appendaof no的。也就是有可能會丟失最多30s的log。
所以如果你有lag問題,把下邊改成yes,否則就用no。yes意思是暫停aof,拒絕主進程的這次fsync。no是redis是排隊的,不會被prevent了,但主進程是阻塞的。
(5)自動重寫AOF
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
當AOF文件大小到一定比例,就自動隱式調用BGREWRITEAOF。
過程:redis記住最后一次rewrite時aof文件大小(重啟后沒rewrite的話,就是啟動時AOF文件的大小),如果現在AOF大小和上次的比例達到特定值就重寫。也要指定最小AOF大小。
百分比(percentage)設置為0時,禁用自動重寫功能。
(6)容錯
aof-load-truncated yes
AOF文件可能在尾部是不完整的(上次system關閉有問題,尤其是mount ext4文件系統時沒有加上data=ordered選項。只會發生在os死時,redis自己死不會不完整)。那redis重啟時load進內存的時候就有問題了。
發生的時候,可以選擇redis啟動報錯,或者load盡量多正常的數據。
如果aof-load-truncated是yes,會自動發布一個log給客戶端然后load(默認)。
如果是no,用戶必須手動redis-check-aof修復AOF文件才可以。
7、LUA 腳本
(1)執行時間
lua-time-limit 5000
以毫秒為單位的最大腳本執行時間。
如果打到了這個值,腳本還沒執行完Redis會記錄并返回錯誤。
當一個腳本超過了最大時限時只有SCRIPT KILL和SHUTDOWN NOSAVE可以用。第一個可以殺沒有調write命令的東西。要是已經調用了write,就只能用第二個命令殺。
設置為0時執行時間無限制。
8、集群(REDIS CLUSTER)
此處暫不介紹(暫時用不上)。
9、慢日志(SLOW LOG)
Redis的慢日志是一個記錄超過規定的執行時間查詢的系統。執行時間不包括I/O操作,如與客戶端通信,回復等,只是實際執行該命令所需要的時間。
(1)時間
slowlog-log-slower-than 10000
線程阻塞不能服務其他請求的時間長度,以微秒計時,1s=1000*1000微秒。設置為負值時禁用慢日志,設置為0是記錄所有請求。
(2)長度
slowlog-max-len 128
長度沒有限制,但是會消耗內存。可以通過SLOWLOG RESET回收舊日志的內存。
10、延遲監控
(1)延時監控
latency-monitor-threshold 0
收集運行時不同命令的耗時,可以通過LATENCY命令打印這些圖表。計時單位為毫秒,系統只記錄比latency-monitor-threshold值大的記錄。如果配置為0表示關閉監控(默認)。
也可以通過命令“CONFIG SET latency-monitor-threshold <milliseconds>”來動態開始此功能。
11、事件通知
(1)事件通知
notify-keyspace-events ""
可以通知pub/sub(發布/訂閱)客戶端關于key空間的變化。比如:如果開著開關,一個client在db0上key=“foo”上進行了DEL操作,兩個消息將會通過 pub/sub 發布
PUBLISH __keyspace@0__:foo del
PUBLISH __keyevent@0__:del foo
每一種通知由一個字母表示:
K Keyspace events, published with __keyspace@<db>__ prefix.
E Keyevent events, published with __keyevent@<db>__ prefix.
g Generic commands (non-type specific) like DEL, EXPIRE, RENAME, ...
$ String commands
l List commands
s Set commands
h Hash commands
z Sorted set commands
x Expired events (events generated every time a key expires)
e Evicted events (events generated when a key is evicted for maxmemory)
A Alias for g$lshzxe, so that the "AKE" string means all the events.
參數由以上字母組成,若配置為空字符串,表示不開啟此功能。
例如,可能會如下配置:
notify-keyspace-events Ex
大部分人不需要這個功能,并且還需要一定開銷,所以默認關閉。詳情見:http://redis.io/topics/notifications
12、高級配置
暫不介紹〒_〒,主要是抽不出那么多時間。。。后期再補。
更多
1、RDB 和 AOF間的選擇
一般來說,如果想達到足以媲美 PostgreSQL 的數據安全性, 你應該同時使用兩種持久化功能。如果你非常關心你的數據,但仍然可以承受數分鐘以內的數據丟失, 那么你可以只使用 RDB 持久化。有很多用戶都只使用 AOF 持久化, 但我們并不推薦這種方式: 因為定時生成 RDB 快照(snapshot)非常便于進行數據庫備份, 并且 RDB 恢復數據集的速度也要比 AOF 恢復的速度要快, 除此之外, 使用 RDB 還可以避免之前提到的 AOF 程序的 bug 。 如我在上篇中所述,RDB與AOF可以同時啟用,那么就做到了“數據高同步不丟失”的效果,可是你會應此付出高昂的網絡IO開銷,因為在使用AOF進行數據同步時造成的網絡讀寫也是開銷很大的。 因此這就要看你的設計了,一般來說一個設計不能夠因為緩沖服務宕了或者不可用了而影響到整個應用不能使用,如果設計成這樣那么這樣的架構是比較糟糕的。
總結
以上是生活随笔為你收集整理的Reds3配置文件详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Arista 7500E系列交换机与SF
- 下一篇: 打飞机--C语言版(是真打飞机!)