RDB
1.RDB介紹
在指定的時間間隔內將記憶體中的資料集快照寫入磁盤,也就是行話講的Snapshot快照,它恢復時是將快照檔案直接讀到記憶體里,
Redis會單獨創建(fork)一個子行程來進行持久化,會先將資料寫入到一個臨時檔案中,待持久化程序都結束了,再用這個臨時檔案替換上次持久化好的檔案,整個程序中,主行程是不進行任何IO操作的,這就確保了極高的性能如果需要進行大規模資料的恢復,且對于資料恢復的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效,RDB的缺點是最后一次持久化后的資料可能丟失,
Fork的作用是復制一個與當前行程一樣的行程,新行程的所有資料(變數、環境變數、程式計數器等)數值都和原行程一致,但是是一個全新的行程,并作為原行程的子行程,
|
[root@pluto bin]# redis-server /myredis/redis.conf [root@pluto bin]# redis-cli -p 6379 127.0.0.1:6379> set k1 v1 OK 127.0.0.1:6379> set k2 v2 OK 127.0.0.1:6379> set k3 v3 OK 127.0.0.1:6379> set k4 v4 OK 127.0.0.1:6379> set k5 v5 OK 127.0.0.1:6379> set k6 v6 OK 127.0.0.1:6379> set k7 v7 OK 127.0.0.1:6379> set k8 v8 OK 127.0.0.1:6379> set k9 v9 OK 127.0.0.1:6379> set k10 v10 OK 127.0.0.1:6379> set k11 v11 OK 127.0.0.1:6379> |
|
[root@pluto bin]# ls -l 總用量 15456 -rwxr-xr-x. 1 root root 4589115 7月 17 19:20 redis-benchmark -rwxr-xr-x. 1 root root 22177 7月 17 19:20 redis-check-aof -rwxr-xr-x. 1 root root 45387 7月 17 19:20 redis-check-dump -rwxr-xr-x. 1 root root 4693066 7月 17 19:20 redis-cli lrwxrwxrwx. 1 root root 12 7月 17 19:20 redis-sentinel -> redis-server -rwxr-xr-x. 1 root root 6466469 7月 17 19:20 redis-server [root@pluto bin]# ls -l 總用量 15460 -rw-r--r--. 1 root root 101 7月 19 16:19 dump.rdb -rwxr-xr-x. 1 root root 4589115 7月 17 19:20 redis-benchmark -rwxr-xr-x. 1 root root 22177 7月 17 19:20 redis-check-aof -rwxr-xr-x. 1 root root 45387 7月 17 19:20 redis-check-dump -rwxr-xr-x. 1 root root 4693066 7月 17 19:20 redis-cli lrwxrwxrwx. 1 root root 12 7月 17 19:20 redis-sentinel -> redis-server -rwxr-xr-x. 1 root root 6466469 7月 17 19:20 redis-server [root@pluto bin]# |

|
[root@pluto bin]# redis-server /myredis/redis.conf [root@pluto bin]# redis-cli -p 6379 127.0.0.1:6379> keys * 1) "k4" 2) "k5" 3) "k3" 4) "k7" 5) "k9" 6) "k6" 7) "k2" 8) "k8" 9) "k10" 10) "k11" 11) "k1" |
|
[root@pluto bin]# rm -f dump.rdb [root@pluto bin]# cp dump_bk.rdb dump.rdb |

2觸發RDB快照

3如何恢復

3)優劣勢

4如何停止
|
動態所有停止RDB保存規則的方法:redis-cli config set save "" |
5總結

AOF
1.AOF簡介
以日志的形式來記錄每個寫操作,將Redis執行過的所有寫指令記錄下來(讀操作不記錄),只許追加檔案但不可以改寫檔案,redis啟動之扯訓讀取該檔案重新構建資料,換言之,redis重啟的話就根據日志檔案的內容將寫指令從前到后執行一次以完成資料的恢復作業,
2. 開啟AOF

|
[root@pluto bin]# redis-server /myredis/redis_aof.conf [root@pluto bin]# redis-cli -p 6379 127.0.0.1:6379> set k1 v1 OK 127.0.0.1:6379> set k2 v2 OK 127.0.0.1:6379> set k3 v3 OK 127.0.0.1:6379> set k4 v4 OK 127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> SHUTDOWN not connected> exit
[root@pluto bin]# redis-server /myredis/redis_aof.conf [root@pluto bin]# redis-cli -p 6379 127.0.0.1:6379> keys * (empty list or set) 127.0.0.1:6379>
#如果想要獲取上一次的k1 k2 k3 k4只需要編輯appendonly.aof移到末尾洗掉FLUSHALL即可 |
|
[root@pluto bin]# ll |
3.修復

|
[root@pluto bin]# redis-server /myredis/redis_aof.conf [root@pluto bin]# redis-cli -p 6379 Could not connect to Redis at 127.0.0.1:6379: Connection refused not connected> exit [root@pluto bin]# redis-check-aof --fix appendonly.aof 0x b4: Expected prefix 'a', got: '*' AOF analyzed: size=236, ok_up_to=180, diff=56 This will shrink the AOF from 236 bytes, with 56 bytes, to 180 bytes Continue? [y/N]: y Successfully truncated AOF [root@pluto bin]# redis-server /myredis/redis_aof.conf [root@pluto bin]# redis-cli -p 6379 |
4.Rewrite

5.優劣勢

6.總結

總結

|
因為RDB檔案只用作后備用途,建議只在Slave上持久化RDB檔案,而且只要15分鐘備份一次就夠了,只保留save 900 1這條規則,
如果Enalbe AOF,好處是在最惡劣情況下也只會丟失不超過兩秒資料,啟動腳本較簡單只load自己的AOF檔案就可以了,代價一是帶來了持續的IO,二是AOF rewrite的最后將rewrite程序中產生的新資料寫到新檔案造成的阻塞幾乎是不可避免的,只要硬碟許可,應該盡量減少AOF rewrite的頻率,AOF重寫的基礎大小默認值64M太小了,可以設到5G以上,默認超過原大小100%大小時重寫可以改到適當的數值,
如果不Enable AOF ,僅靠Master-Slave Replication 實作高可用性也可以,能省掉一大筆IO也減少了rewrite時帶來的系統波動,代價是如果Master/Slave同時倒掉,會丟失十幾分鐘的資料,啟動腳本也要比較兩個Master/Slave中的RDB檔案,載入較新的那個,新浪微博就選用了這種架構 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/179278.html
標籤:其他
上一篇:“花式”裁員套路深,你知道嗎?
下一篇:如何理解 HTTPS
