redis 安裝配置及持久化詳解

來源:互聯網
上載者:User

標籤:redis 持久化

一、redis簡介

二、redis安裝

三、redis設定檔詳解

四、redis持久化詳解


1.redis 簡介

Redis 是一個開源(BSD許可)的,記憶體中的資料結構儲存系統,它可以用作資料庫、緩衝和訊息中介軟體。 它支援多種類型的資料結構,如 字串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 與範圍查詢, bitmaps, hyperloglogs 和 地理空間(geospatial) 索引半徑查詢。 Redis 內建了 複製(replication),LUA指令碼(Lua scripting), LRU驅動事件(LRU eviction),事務(transactions) 和不同層級的 磁碟持久化(persistence), 並通過 Redis哨兵(Sentinel)和自動 分區(Cluster)提供高可用性(high availability)。

總的來說,redis更像是NoSQL,因Redis將資料存放區於記憶體中,所以redis運行速度比傳統的資料庫快的多的多,根據業界測試,最佳化較好的單台可支援數十萬的並發。


2.redis 安裝

官網下載最新穩定版本:http://redis.io/

最新穩定版本:redis-3.0.7.tar.gz 

#此版本支援叢集

tar -xf redis-3.0.7.tar.gz cd redis-3.0.7make


建立目錄及拷貝所需檔案

mkdir -p /usr/local/redis/{conf,bin}cp *.conf /usr/local/redis/conf/cp runtest* /usr/local/redis/cp mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-dump redis-cli redis-sentinel redis-server redis-trib.rb /usr/local/redis/bin/

建立資料檔案目錄

mkdir -pv /data/redis/db


建立日誌路徑

mkdir /data/log/redis -pv

3.設定檔詳解

vim /usr/local/redis/conf/redis.conf

daemonize yes#redis 以獨立守護模式進程pidfile /var/run/redis.pid#指定pid檔案路徑port 6379#指定redis啟動並執行連接埠tcp-backlog 511#TCP 監聽的最大容納數量,在高並發的環境下,你需要把這個值調高以避免用戶端串連緩慢的問題。Linux 核心會一聲不響的把這個值縮小成 /proc/sys/net/core/somaxconn對應的值,所以你要修改這兩個值才能達到你的預期。# bind 127.0.0.1#指定redis監聽的地址,預設監聽所有# unixsocket /tmp/redis.sock#指定redis在Linux下socket檔案路徑timeout 0#用戶端空閑多少秒後中斷連線;預設是 0 表示不斷開。tcp-keepalive 0#如果設定為非零,則在與用戶端缺乏通訊的時候使用 SO_KEEPALIVE 發送 tcp acks 給用戶端。推薦一個合理的值就是60秒。loglevel notice#記錄檔層級,提供debug,verbose,notice,warning四種記錄層級。logfile "/data/log/redis/redis.log"#指定記錄檔路徑databases 16#指定資料庫執行個體的數量,預設為16個,預設使用的資料庫是DB 0。#RDB持久化的相關規則#-------------------------------save 900 1#900秒有一個key變化則寫磁碟save 300 10#300秒有10個key變化,則寫磁碟save 60 10000#60秒有10000個key變化,則寫磁碟#-------------------------------stop-writes-on-bgsave-error yes預設情況下,如果 redis 最後一次的後台儲存失敗,redis 將停止接受寫操作,這樣以一種強硬的方式讓使用者知道資料不能正確的持久化到磁碟,否則就會沒人注意到災難的發生。如果後台儲存進程重新啟動工作了,redis 也將自動的允許寫操作。然而你要是安裝了靠譜的監控,你可能不希望 redis 這樣做,那你就改成 no 好了。rdbcompression yes# 是否在 dump .rdb 資料庫的時候使用 LZF 壓縮字串,預設都設為 yes如果你希望儲存子進程節省點 cpu ,你就設定它為 no ,不過這個資料集可能就會比較大。rdbchecksum yes#是否校正RDB檔案dbfilename dump.rdb#RDB檔案儲存檔案名稱dir /data/redis/db#DB檔案儲存路徑RDB和AOF檔案# slaveof <masterip> <masterport>#開啟redis主從複製設定# masterauth <master-password>#串連主伺服器需要的認證密碼slave-serve-stale-data yes# 當一個 slave 與 master 失去聯絡,或者複製進行中的時候,slave 可能會有兩種表現:#1) 如果為 yes ,slave 仍然會應答用戶端請求,但返回的資料可能是過時,或者資料可能是空的在第一次同步的時候#2) 如果為 no ,在你執行除了 info he salveof 之外的其他命令時,slave 都將返回一個 "SYNC with master in progress" 的錯誤。slave-read-only yes#設定salve是否為唯讀模式, 2.6之後,redis預設slave都是read-only的。repl-diskless-sync no# 複製集同步策略:磁碟或者socket# 新slave串連或者老slave重新串連時候不能只接收不同,得做一個全同步。需要一個新的RDB檔案dump出來,然後從master傳到slave。可以有兩種情況:# 1)基於硬碟(disk-backed):master建立一個新進程dump RDB,完事兒之後由父進程(即主進程)增量傳給slaves。# 2)基於socket(diskless):master建立一個新進程直接dump RDB到slave的socket,不經過主進程,不經過硬碟。# 基於硬碟的話,RDB檔案建立後,一旦建立完畢,可以同時服務更多的slave。基於socket的話, 新slave來了後,得排隊(如果超出了repl-diskless-sync-delay還沒來),完事兒一個再進行下一個。# 當用diskless的時候,master等待一個repl-diskless-sync-delay的秒數,如果沒slave來的話,就直接傳,後來的得排隊等了。否則就可以一起傳。# disk較慢,並且網路較快的時候,可以用diskless。(預設用disk-based)repl-diskless-sync-delay 5#當啟用無硬碟備份,伺服器等待一段時間後才會通過通訊端向從站傳送RDB檔案,這個等待時間是可配置的。這一點很重要,因為一旦傳送開始,就不可能再為一個新到達的從站服務從站則要排隊等待下一次RDB傳送。因此伺服器等待一段時間以期更多的從站到達。 延遲時間以秒為單位,預設為5秒。要關掉這一功能,只需將它設定為0秒,傳送會立即啟動。# repl-ping-slave-period 10#預設值10,指定slave定期ping master的周期;# repl-timeout 60#以下內容設定備份的逾時時間: #1)從從站的角度,同步期間的批量傳輸的I/O #2)從站角度認為的主站逾時(資料,ping) #3)主站角度認為的從站逾時(REPLCONF ACK pings) #確認這些值比定義的repl-ping-slave-period要大,否則每次主站和從站之間通訊低速時都會被檢測為逾時。repl-disable-tcp-nodelay no#同步之後是否禁用從站上的TCP_NODELAY? #如果你選擇yes,redis會使用較少量的TCP包和頻寬向從站發送資料。但這會導致在從站增加一點資料的延時。linux核心預設配置情況下最多40毫秒的延時。 #如果選擇no,從站的資料延時不會那麼多,但備份需要的頻寬相對較多。 #預設情況下我們將潛在因素最佳化,但在高負載情況下或者在主從站都跳的情況下,把它切換為yes是個好主意。# repl-backlog-size 1mb#設定備份的工作儲備大小。工作儲備是一個緩衝區,當從站斷開一段時間的情況時,它替從站接收儲存資料,因此當從站重連時,通常不需要完全備份,只需要一個部分同步就可以,#即把從站斷開時錯過的一部分資料接收。 #工作儲備越大,從站可以斷開並稍後執行部分同步的斷開時間就越長。 #只要有一個從站串連,就會立刻分配一個工作儲備。# repl-backlog-ttl 3600#主站有一段時間沒有與從站串連,對應的工作儲備就會自動釋放。接下來這個選項用於配置釋放前等待的秒數,秒數從斷開的那一刻開始計算。 值為0表示不釋放。slave-priority 100#從站優先順序是可以從redis的INFO命令輸出中查到的一個整數。當主站不能正常工作時,redis sentinel使用它來選擇一個從站並將它提升為主站。 #低優先順序的從站被認為更適合於提升,因此如果有三個從站優先順序分別是10, 100, 25,sentinel會選擇優先順序為10的從站,因為它的優先順序最低。 #然而優先順序值為0的從站不能執行主站的角色,因此優先順序為0的從站永遠不會被redis sentinel提升。 #預設優先順序是100# min-slaves-to-write 3# min-slaves-max-lag 10#主站可以停止接受寫請求,當與它串連的從站少於N個,滯後少於M秒。 #N個從站必須是線上狀態。 #延遲的秒數必須<=所定義的值,延遲秒數是從最後一次收到的來自從站的ping開始計算。ping通常是每秒一次。 #這一選項並不保證N個備份都會接受寫請求,但是會限制在指定秒數內由於從站數量不夠導致的寫操作丟失的情況。 #如果想要至少3個從站且延遲少於10秒,以上配置#設定某一個為0表示禁用這一功能。# min-slaves-max-lag is set to 10.#預設情況下default min-slaves-to-write設定為0(禁用)而min-slaves-max-lag設定為10。# requirepass foobared#多數情況下無需密碼鑒別slave。同時,由於redis處理速度太快,所以爆破速率可達150K/S。10萬/S。所以如果你要設定密碼,必須設定超強的密碼。# rename-command CONFIG ""# 命令重新命名,在一個shared環境裡,可以對危險的命令,比如CONFIG,進行重新命名:也可以用Null 字元串,達到完全屏蔽此命令的目的。# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52# rename-command CONFIG ""# 記錄進AOF或者傳給slave的重新命名操作可能會引發問題哦~。# maxclients 10000設定最大client串連數。預設10000一萬個。# maxmemory <bytes>#如果redis用記憶體超過了設定的限制,第一,開始用maxmemory-policy配置的策略往外刪資料,如果配置成了noeviction。所有write都會拒絕,比如set,lpush等。所有讀請求可以接受。主要用在把redis用在LRU緩衝,或者用在一個記憶體吃緊又不能刪除的策略上。如果你有slave,你應該把最大記憶體別設定的太大,留一些系統記憶體給slave output buffers(如果是noeviction策略,就無需這樣設定了)# 記憶體策略。# volatile-lru ->用LRU刪除設定了ttl的key# allkeys-lru ->用LRU刪除任何key# volatile-random ->隨機刪除有ttl的key# allkeys-random ->隨機刪除任何key# volatile-ttl ->刪除即將ttl到期的key# noeviction ->不刪,有write的時候報錯# maxmemory-policy noeviction#預設值volatile-lru,指定清除策略,有上面幾種# maxmemory-samples 5預設值3,LRU和最小TTL策略並非嚴謹的策略,而是大約估算的方式,因此可以選擇取樣值以便檢查。appendonly no#是否開啟AOF模式appendfilename "appendonly.aof"#指定AOF檔案名稱# appendfsync alwaysappendfsync everysec# appendfsync no#調用fsync()方式讓作業系統寫資料到磁碟上,資料同步方式,以上幾種#always 總是寫,一旦key發生變化就寫磁碟,會消耗大量的系統資源。#appendfsync everysec 每秒寫一次磁碟,比較安全。# appendfsync no不調用fsync,由作業系統決定何時同步,比較高效。no-appendfsync-on-rewrite no#預設值no。當AOF fsync原則設定為always或everysec,後台儲存進程會執行大量的I/O操作。某些linux配置下redis可能會阻塞過多的fsync()調用。auto-aof-rewrite-percentage 100auto-aof-rewrite-min-size 64mb# 自動重寫AOF# 當AOF檔案大小到一定比例,就自動隱式調用BGREWRITEAOF#過程:redis記住最後一次rewrite時aof檔案大小(重啟後沒rewrite的話,就是啟動時AOF檔案的大小),如果現在AOF大小和上次的比例達到特定值就重寫。也要指定最小AOF大小,防止到2倍:1M的時候也重寫。# 把percentage改成0,就是禁用重寫。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檔案才可以。lua-time-limit 5000# 如果達到最大時間限制(毫秒),redis會記個log,然後返回error。# 當一個指令碼超過了最大時限。只有SCRIPT KILL和SHUTDOWN NOSAVE可以用。第一個可以殺沒有調write命令的東西。要是已經調用了write,只能用第二個命令殺。# 設定成0或者負值,時限就無限。# cluster-enabled yes#是否開啟叢集功能在3.0以後的版本支援叢集。# cluster-config-file nodes-6379.conf#指定叢集設定檔# cluster-node-timeout 15000#RedisCluster採用quorum+心跳的機制。從節點的角度看,節點會定期給其他所有的節點發送Ping,cluster-node-timeout(可配置,秒級)時間內沒有收到對方的回複,則單方面認為對端節點宕機,將該節點標為PFAIL狀態。# cluster-slave-validity-factor 10#如果將該項設定為0,不管slave節點和master節點間失聯多久都會一直嘗試failover(設為正數,失聯大於一定時間(factor*節點TimeOut),不再進行FailOver)。比如,如果節點的timeout設定為5秒,該項設定為10,如果master跟slave之間失聯超過50秒,slave不會去failover它的master(意思是不會去把master設定為掛起狀態,並取代它)。注意:任意非0數值都有可能導致當master掛掉又沒有slave去failover它,這樣redis叢集不可用。在這種情況下只有原來那個master重新回到叢集中才能讓叢集恢複工作。# cluster-migration-barrier 1#一個master可以擁有的最小slave數量。該項的作用是,當一個master沒有任何slave的時候,某些有富餘slave的master節點,可以自動的分一個slave給它。# cluster-require-full-coverage yes#如果該項設定為yes(預設就是yes)當一定比例的鍵空間沒有被覆蓋到(就是某一部分的雜湊槽沒了,有可能是暫時掛了)叢集就停止處理任何查詢炒作。如果該項設定為no,那麼就算請求中只有一部分的鍵可以被查到,一樣可以查詢(但是有可能會查不全)slowlog-log-slower-than 10000#線程阻塞不能服務其他請求的時間長度。兩個參數:第一個是時間長度(以微秒為單位!,是毫秒的千分之一。)。第二個是log的size,超過了,就會刪除之前的log。# 1000000是一秒。負值是所有請求都記log!下邊是0.10S。100毫秒。slowlog-max-len 128# log長度的設定值是沒限制。但是需要記憶體。latency-monitor-threshold 0# 用LATENCY列印redis執行個體在跑命令時的耗時圖表。# 只記錄大於等於下邊設定的值的操作。0的話,就是關閉監視。可以動態開啟。直接運行CONFIG SET latency-monitor-threshold <milliseconds>notify-keyspace-events ""# 可以通知pub/sub用戶端關於key空間的變化。http://redis.io/topics/notifications# 比如如果開著開關。一個client進行了DEL操作在“foo”key上在database0上。兩個訊息將會發布通過 pub/sub# PUBLISH [email protected]__:foo del# PUBLISH [email protected]__:del foo# 大部分人不需要這個功能,並且還需要一定開銷,所以預設關閉。hash-max-ziplist-entries 512hash-max-ziplist-value 64# hash結構儲存,小資料量的用數組,大資料量用map(encoding儲存結構資訊)list-max-ziplist-entries 512list-max-ziplist-value 64# 與hash類似,滿足條件的list數組也會採用特殊的方式以節省空間的。set-max-intset-entries 512# 預設值512,當set類型中的資料都是數實值型別,並且set中整型元素的數量不超過指定值時,使用特殊的編碼方式。zset-max-ziplist-entries 128zset-max-ziplist-value 64#與hash和list類似。hll-sparse-max-bytes 3000#HyperLogLog 不懂。大於16000完全不可接受!當CPU很頂得住的話,給10000可以。預設給3000.activerehashing yes# Active rehashing 越多次的操作進入了進行中rehash的table,越多的rehash步驟需要執行。如果redis是閒置,那麼rehash操作是永遠沒法停止的,越多的記憶體也被消耗了。# 預設就用yes就行 了如果你想釋放記憶體ASAP。client-output-buffer-limit normal 0 0 0client-output-buffer-limit slave 256mb 64mb 60client-output-buffer-limit pubsub 32mb 8mb 60# client output buffer限制,可以用來強制關閉傳輸緩慢的用戶端(比如redis pub的東西有比較慢的client無法及時sub)# client-output-buffer-limit <class> <hard limit> <soft limit> <soft seconds># class可以為以下:## normal -> normal clients including MONITOR clients# slave  -> slave clients# pubsub -> clients subscribed to at least one pubsub channel or pattern# 當hard限制到了會立即被關閉用戶端。如果soft限制到了,會等soft秒。# 比如硬限制是32m,soft是16m,10secs。到32m就立即斷,或者在16m以上停止了10secs。# 設定成0就是關閉。hz 10# redis內部調度(進行關閉timeout的用戶端,刪除到期key等等)頻率,越大則調度頻率越高。設定成100以上會對CPU造成大壓力除非你對線上即時性要求很高。可以在1~500之間。aof-rewrite-incremental-fsync yes# 當child進程在rewrite AOF檔案,如果這個選項是yes,那麼這個file每32MB會寫fsync()。這個是保證增量寫硬碟而防止寫硬碟時I/O突增。

3.1.設定檔樣本

daemonize nopidfile /var/run/redis.pidport 6379tcp-backlog 511timeout 0tcp-keepalive 0loglevel noticelogfile "/data/log/redis/redis.log"databases 16save 900 1save 300 10save 60 10000stop-writes-on-bgsave-error yesrdbcompression yesrdbchecksum yesdbfilename dump.rdbdir /data/redis/dbslave-serve-stale-data yesslave-read-only yesrepl-diskless-sync norepl-diskless-sync-delay 5repl-disable-tcp-nodelay noslave-priority 100appendonly yes appendfilename "appendonly.aof"appendfsync everysecno-appendfsync-on-rewrite noauto-aof-rewrite-percentage 100auto-aof-rewrite-min-size 1024mbaof-load-truncated yeslua-time-limit 5000slowlog-log-slower-than 10000slowlog-max-len 128latency-monitor-threshold 0notify-keyspace-events ""hash-max-ziplist-entries 512hash-max-ziplist-value 64list-max-ziplist-entries 512list-max-ziplist-value 64set-max-intset-entries 512zset-max-ziplist-entries 128zset-max-ziplist-value 64hll-sparse-max-bytes 3000activerehashing yesclient-output-buffer-limit normal 0 0 0client-output-buffer-limit slave 256mb 64mb 60client-output-buffer-limit pubsub 32mb 8mb 60hz 10aof-rewrite-incremental-fsync yes

3.2.啟動服務

# /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf


查看服務

# ps -ef | grep redisroot     24596 23241  0 14:52 pts/1    00:00:00 /usr/local/redis/bin/redis-server *:6379                          502      24646 21849  0 14:52 pts/2    00:00:00 grep redis

4.持久化說明

4.1.兩種持久化說明

Redis 提供了多種不同層級的持久化方式:

(1)RDB 持久化可以在指定的時間間隔內產生資料集的時間點快照(point-in-time snapshot)。

(2)AOF持久化記錄伺服器執行的所有寫操作命令,並在伺服器啟動時,通過重新執行這些命令來還原資料集。AOF檔案中的命令全部以Redis協議的格式來儲存,新命令會被追加到檔案的末尾。Redis 還可以在後台對AOF 檔案進行重寫(rewrite),使得AOF 檔案的體積不會超出儲存資料集狀態所需的實際大小。

(3)Redis 還可以同時使用AOF 持久化和RDB 持久化。在這種情況下,當Redis 重啟時,它會優先使用

AOF 檔案來還原資料集,因為AOF 檔案儲存的資料集通常比RDB 檔案所儲存的資料集更完整。

(4)你甚至可以關閉持久化功能,讓資料只在伺服器運行時存在。

瞭解RDB 持久化和AOF 持久化之間的異同是非常重要的,以下幾個小節將詳細地介紹這這兩種持久化功

能,並對它們的相同和不同之處進行說明。


4.2.RDB 的優缺點

4.2.1.RDB有點

(1)RDB 是一個非常緊湊(compact)的檔案,它儲存了Redis 在某個時間點上的資料集。這種檔案非常適合用於進行備份:比如說,你可以在最近的24 小時內,每小時備份一次RDB 檔案,並且在每個月的每一天,也備份一個RDB 檔案。這樣的話,即使遇上問題,也可以隨時將資料集還原到不同的版本。

(2) RDB 非常適用於災難恢複(disaster recovery):它只有一個檔案,並且內容都非常緊湊,可以(在加密後)將它傳送到別的資料中心,或者亞馬遜S3 中。

(3)RDB 可以最大化Redis 的效能:父進程在儲存RDB 檔案時唯一要做的就是fork 出一個子進程,然後這個子進程就會處理接下來的所有儲存工作,父進程無須執行任何磁碟I/O 操作。

(4)RDB 在恢複大資料集時的速度比AOF 的恢複速度要快。


4.2.2.RDB 的缺點

 (1)如果你需要盡量避免在伺服器故障時遺失資料,那麼RDB 不適合你。雖然Redis 允許你設定不同的儲存點(save point)來控制儲存RDB 檔案的頻率,但是,因為RDB 檔案需要儲存整個資料集的狀態,所以它並不是一個輕鬆的操作。因此你可能會至少5 分鐘才儲存一次RDB 檔案。在這種情況下,一旦發生故障停機,你就可能會丟失好幾分鐘的資料。


 (2)每次儲存RDB 的時候,Redis 都要fork() 出一個子進程,並由子進程來進行實際的持久化工作。在資料集比較龐大時,fork() 可能會非常耗時,造成伺服器在某某毫秒內停止處理用戶端;如果資料集非常巨大,並且CPU 時間非常緊張的話,那麼這種停止時間甚至可能會長達整整一秒。雖然AOF 重寫也需要進行fork() ,但無論AOF 重寫的執行間隔有多長,資料的耐久性都不會有任何損失。


 4.3.AOF優缺點

 4.3.1.AOF優點

 (1) 使用AOF 持久化會讓Redis 變得非常耐久(much more durable):你可以設定不同的fsync 策略,比如無fsync ,每秒鐘一次fsync ,或者每次執行寫入命令時fsync 。AOF 的預設策略為每秒鐘fsync 一次,在這種配置下,Redis 仍然可以保持良好的效能,並且就算髮生故障停機,也最多隻會丟失一秒鐘的資料(fsync 會在後台線程執行,所以主線程可以繼續努力地處理命令請求)。

(2) AOF 檔案是一個只進行追加操作的記錄檔(append only log),因此對AOF 檔案的寫入不需要進行seek ,即使日誌因為某些原因而包含了未寫入完整的命令(比如寫入時磁碟已滿,寫入中途停機,等等),redis-check-aof 工具也可以輕易地修複這種問題。

(3)Redis 可以在AOF 檔案體積變得過大時,自動地在後台對AOF 進行重寫:重寫後的新AOF 檔案包含了恢複當前資料集所需的最小命令集合。整個重寫操作是絕對安全的,因為Redis 在建立新AOF檔案的過程中,會繼續將命令追加到現有的AOF 檔案裡面,即使重寫過程中發生停機,現有的AOF檔案也不會丟失。而一旦新AOF 檔案建立完畢,Redis 就會從舊AOF 檔案切換到新AOF 檔案,並開始對新AOF 檔案進行追加操作。

(4)AOF 檔案有序地儲存了對資料庫執行的所有寫入操作,這些寫入操作以Redis 協議的格式儲存,因此AOF 檔案的內容非常容易被人讀懂,對檔案進行分析(parse)也很輕鬆。匯出(export)AOF 檔案也非常簡單:舉個例子,如果你不小心執行了FLUSHALL 命令,但只要AOF 檔案未被重寫,那麼只要停止伺服器,移除AOF 檔案末尾的FLUSHALL 命令,並重啟Redis ,就可以將資料集恢複到FLUSHALL 執行之前的狀態。


 4.3.2.AOF 缺點

 (1)對於相同的資料集來說,AOF 檔案的體積通常要大於RDB 檔案的體積。

 (2) 根據所使用的fsync 策略,AOF 的速度可能會慢於RDB 。在一般情況下,每秒fsync 的效能依然非常高,而關閉fsync 可以讓AOF 的速度和RDB 一樣快,即使在高負荷之下也是如此。不過在處理巨大的寫入載入時,RDB 可以提供更有保證的最大延遲時間(latency)。

 (3) AOF 在過去曾經發生過這樣的bug :因為個別命令的原因,導致AOF 檔案在重新載入時,無法將資料集恢複成儲存時的原樣。(舉個例子,阻塞命令BRPOPLPUSH 就曾經引起過這樣的bug 。)測試套件裡為這種情況添加了測試:它們會自動產生隨機的、複雜的資料集,並通過重新載入這些資料來確保一切正常。雖然這種bug 在AOF 檔案中並不常見,但是對比來說,RDB 幾乎是不可能出現這種bug 的。


總結:至於你想用哪種取決你的業務,是資料重要還是效能,如果為了安全,建議兩者一起使用

本文出自 “深呼吸再出擊” 部落格,請務必保留此出處http://ckl893.blog.51cto.com/8827818/1770766

redis 安裝配置及持久化詳解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.