redis 數據的查詢都是基於內存hash處理,但是為了防止斷電榻機等問題造成數據的丟失,redis 采用持久化硬盤方式以應對數據丟失故障。
先看下redis 目錄操作命令:
redis/bin 目錄下有
1. redis-benchmark 為redis 性能基准測試
2. redis-check-aof 為aof 文件恢復出現異常的修復
3. redis-check-dump 為rdb 文件恢復出現異常的修復
4. redis-cli 為redis客戶端操作
5. redis-server 為redis 服務端啟動程序
1. redis 持久化有兩種方案可供選擇RDB (redis data base ) 和 aof (append only file )
rdb 詳解:
1)RDB 是 Redis 默認的持久化方案。在指定的時間間隔內,執行指定次數的寫操作,則會將內存中的數據寫入到磁盤中。即在指定目錄下生成一個dump.rdb文件。Redis 重啟會通過加載dump.rdb文件恢復數據。
2)redis.conf 配置茹下
如果需要自定義快照rdb 的持久化方式,可以取消注釋 save "",加入新的快照策略
3)默認redis 使用快照的方式持久化內存數據至硬盤;
save 900 1 900秒內有一個以上的key 寫操作會另起一個線程進行快照的備份
4) redis.conf dir ./ 設置數據存放目錄
5) rdbcompression yes 默認使用rdb 的壓縮方式壓縮文件。
rdb 是redis 快速塊照內存信息至硬盤持久化;但持久的方式
aof 詳解:
1) aof 不是redis 默認開起的持久化方式。aof 的出現是彌補rdb 文件的不實時一致性。采用日志的形式來記錄每個寫操作,並追加到文件中
2)aof 開啟方式 appendonly yes
3) 數據庫文件名 appendfilename "appendonly.aof"
4)文件追加方式 # appendfsync always 同步持久化,每次發生數據變化會立刻寫入到磁盤中
appendfsync everysec (默認方式)每秒異步寫入磁盤
# appendfsync no 不同步
5)aof 數據恢復,默認情況下,數據都會存在bin目錄下,重新啟動redis 即可以恢復之前的狀態,load 硬盤數據至內存中
6)aof 文件壓縮配置 (redis 每次的操作都會append 至aof 文件末尾,導致文件異常龐大,此配置壓縮文件,替換舊文件)
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
rdb 文件和 aof 文件可在生產中同時開啟,redis 數據恢復首先加載aof 文件,如果aof 文件異常,可以使用rdb 恢復。
總結
- Redis 默認開啟RDB持久化方式,在指定的時間間隔內,執行指定次數的寫操作,則將內存中的數據寫入到磁盤中。
- RDB 持久化適合大規模的數據恢復但它的數據一致性和完整性較差。
- Redis 需要手動開啟AOF持久化方式,默認是每秒將寫操作日志追加到AOF文件中。
- AOF 的數據完整性比RDB高,但記錄內容多了,會影響數據恢復的效率。
- Redis 針對 AOF文件大的問題,提供重寫的瘦身機制。
- 若只打算用Redis 做緩存,可以關閉持久化。
- 若打算使用Redis 的持久化。建議RDB和AOF都開啟。其實RDB更適合做數據的備份,留一后手。AOF出問題了,還有RDB