redis 的持久化策略
rdb模式是預設模式,可以在指定的時間間隔內生成資料快照(snapshot),預設儲存到dump.rdb檔案中。當redis重啟後會自動載入dump.rdb檔案中內容到記憶體中。
使用者可以使用SAVE(同步)或BGSAVE(非同步)手動儲存資料
可以設定伺服器配置的save選項,讓伺服器每隔一段時間自動執行一次BGSAVE命令,可以通過save選項設定多個儲存條件,但只要其中任意一個條件被滿足,伺服器就會執行BGSAVE命令。
例如:
save 900 1
save 300 10
save 60 10000
那麼只要滿足以下三個條件中的任意一個,BGSAVE命令就會被執行
伺服器在900秒之內,對資料庫進行了至少1次修改
伺服器在300秒之內,對資料庫進行了至少10次修改
伺服器在60秒之內,對資料庫進行了至少10000次修改
優點**
rdb檔案是一個緊湊檔案,直接使用rdb檔案就可以還原資料。
資料儲存會由一個子程序進行儲存,不影響父程序。
恢復資料的效率要高於aof
缺點**
每次儲存點之間導致redis不可意料的關閉,可能會丟失資料。
由於每次儲存資料都需要fork()子程序,在資料量比較大時可能會比較耗費效能。
--------------------------------------------------------------------------------------------------------------------------------
AOF
AOF預設是關閉的,需要在配置檔案中開啟AOF。Redis支援AOF和RDB同時生效,如果同時存在,AOF優先順序高於RDB(Redis重新啟動時會使用AOF進行資料恢復)
監聽執行的命令,如果發現執行了修改資料的操作,同時直接同步到資料庫檔案中。
優點**
相對RDB資料更加安全。
缺點**
相同資料集AOF要大於RDB。
相對RDB可能會慢一些。
**開啟辦法**
修改redis.conf中
# 預設no
appendonly yes
# aof檔名
appendfilename "appendonly.aof"
-------------------------------------------------------------------------------------------------------------------------------------------
**Redis主從複製**
Redis支援叢集功能。為了保證單一節點可用性,redis支援主從複製功能。每個節點有N個複製品(replica),其中一個複製品是主(master),另外N-1個複製品是從(Slave),也就是說Redis支援一主多從。
一個主可有多個從,而一個從又可以看成主,它還可以有多個從。
**主從優點**
增加單一節點的健壯性,從而提升整個叢集的穩定性。(Redis中當超過1/2節點不可用時,整個叢集不可用)
從節點可以對主節點資料備份,提升容災能力。
讀寫分離。在redis主從中,主節點一般用作寫(具備讀的能力),從節點只能讀,利用這個特性實現讀寫分離,寫用主,讀用從。
**一主多從搭建**
在已經搭建的單機版redis基礎上進行操作。
並且關閉redis單機版
./redis-cli shutdown
**新建目錄**
mkdir /usr/local/replica
**複製目錄**
把之前安裝的redis單機版中bin目錄複製三份,分別叫做:master、slave1、slave2
# cp -r /usr/local/redis/bin /usr/local/replica/master
# cp -r /usr/local/redis/bin /usr/local/replica/slave1
# cp -r /usr/local/redis/bin /usr/local/replica/slave2
**修改從的配置檔案**
修改2個從的redis.conf,指定主節點ip和埠。並修改自身埠號防止和其他redis衝突。
vim /usr/local/replica/slave1/redis.conf
指定主節點ip和埠
replicaof 192.168.1.11 6379
修改自己埠
port 6380
vim /usr/local/replica/slave2/redis.conf
指定主節點ip和埠
replicaof 192.168.93.10 6379
修改自己埠
port 6381
**啟動三個redis例項**
注意:一定要關閉單機的redis,否則埠衝突
cd /usr/local/replica
vim startup.sh
在檔案中新增下面內容
cd /usr/local/replica/master/
./redis-server redis.conf
cd /usr/local/replica/slave1
./redis-server redis.conf
cd /usr/local/replica/slave2
./redis-server redis.conf
賦予許可權
chmod a+x startup.sh
開啟
./startup.sh
**檢視啟動狀態**
ps aux|grep redis
**新增批量關閉redis**
vim shutdown.sh
在檔案中新增下面內容
cd /usr/local/replica/master/
./redis-cli -p 6379 shutdown
cd /usr/local/replica/slave1
./redis-cli -p 6380 shutdown
cd /usr/local/replica/slave2
./redis-cli 0p 6381shutdown
賦予許可權
chmod a+x shutdown.sh
關閉
./shutdown.sh
**測試***
cd /usr/local/replica/master/
./redis-cli
在客戶端命令列模式下,新增一條資料:
set k1 aaa
進去slave檢視資料是否同步。
cd /usr/local/replica/slave1
./redis-cli -p 6380
get k1