RDB持久化與AOF持久化簡單描述
RDB:RDB使用快照的方式存儲數據庫中的內容,直接將所有鍵值對數據全部存入二進制文件。建議使用BGSAVE來進行備份,整個過程會新fork一個子進程來執行,不影響redis其他進程的IO。
AOF:AOF持久化則是記錄每次數據寫入的操作命令。並且會維護一個AOF緩沖區和一個重寫緩沖區,AOF緩沖區中記錄寫命令並定期保存到已有的持久化文件中。為了避免文件過大,會根據觸發條件進行重寫AOF文件,並且為了保證子進程重寫過程不丟失實時數據,同時會維護一個重寫緩沖區。每次寫命令都會同時記錄在兩個緩沖區中。
兩者的選擇和優劣對比可以參考:https://www.cnblogs.com/ysocean/p/9114268.html
AOF觸發機制
1.沒有BGSAVE命令(RDB持久化)/AOF持久化在執行;
2.沒有BGREWRITEAOF在進行;
3.當前AOF文件大小要大於server.aof_rewrite_min_size(默認為1MB),或者在redis.conf配置了auto-aof-rewrite-min-size大小;
4.當前AOF文件大小和最后一次重寫后的大小之間的比率等於或者等於指定的增長百分比(在配置文件設置了auto-aof-rewrite-percentage參數,不設置默認為100%)
設置redis.conf
在redis服務器所在的容器中中配置redis.conf
- appendonly。默認是appendonly no。改成appendonly yes。設置AOF模式持久化(記錄每次操作,不使用快照,也就是RDB的形式)
- appendfsync。設置成everysec(每秒進行一次相對於always性能更好)。
- dbfilename。 設置保存的文件名稱(可選)
- dir。 設置本地數據存儲位置(可選,我配置到/redis/data,便於做與宿主機文件夾的映射)
配置完以后重啟redis服務
docker 啟動配置
- 設置端口映射6378:6378
- 設置文件掛載/redis/data:/redis/data