1. 程式人生 > 其它 >redis 的持久化策略

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