I find I'm so excited. I can barely sit still or hold a thought in my head. I think it the excitement only a free man can feel, a free man at the start of a long journey whose conclusion is uncertain. I hope I can make it across the border. I hope to see my friend, and shake his hand. I hope the Pacific is as blue as it has been in my dreams. I hope.
redis作為當下最常用的高性能緩存工具,它的持久化也是很有意思的述呐。
現(xiàn)將redis持久化的內(nèi)容提煉總結如下(如有疑誤碑定,請不吝賜教):
1颅眶、redis 持久化有兩種方式:RDB和AOF。RDB存的是快照止吐,AOF存的是寫庫日志。
2、RDB可以使用命令SAVE或者BGSAVE執(zhí)行婿崭,建議寫個腳本,定時保存快照肴颊,比如保存最近24小時每個小時的快照氓栈,保存近30天每天的快照,刪除不使用的快照婿着,并且把快照備份到不同的服務器上授瘦;
AOF通過在配置文件中配置appendonly yes進行開啟醋界,AOF文件也可以執(zhí)行異地備份,即使命令有缺失或者截斷提完,也沒關系形纺。在進行數(shù)據(jù)恢復時,有的redis版本可以自動跳過截斷徒欣,不進行處理逐样。有的版本則需要手動使用redis-check-aof命令對日志進行恢復。
3打肝、RDB 通過fork子進程保存快照官研,對服務可能有一些影響,但絕大部分時間性能都很好闯睹;
AOF需要定期fsync戏羽,即把磁盤緩沖區(qū)的數(shù)據(jù)刷到文件中,對性能可能有一些影響(fsync通過后臺線程完成)楼吃,但是默認的一秒鐘刷一次性能已經(jīng)很接近RDB了始花。
AOF還需要定期rewrite,因為日志文件會越來越大(比如一個key一直被修改孩锡,實際上只需要最后一次修改命令即可)酷宵,通過rewrite保證用最少的日志能恢復當前內(nèi)存中的數(shù)據(jù),用這些日志命令替換老的日志文件躬窜。
不同版本的redis浇垦,有的可以自動rewrite,有的老版本則需要自己不停手動執(zhí)行rewrite命令荣挨。
當然男韧,rewrite也是通過fork子進程來實現(xiàn)的,對服務可能有一些影響默垄。
4此虑、由于RDB是快照,因此如果服務宕機口锭,可能會丟失幾分鐘的數(shù)據(jù)朦前,而AOF默認一秒鐘fsync,因此服務宕機鹃操,只會丟失一秒鐘的數(shù)據(jù)韭寸。
根據(jù)業(yè)務需要進行選取,也可以二者都選荆隘。官方不建議只使用AOF恩伺,因為恢復較慢。
普通業(yè)務只開啟RDB就夠了臭胜,如果是redis cluster集群莫其,可以關閉master的持久化癞尚,只開啟slave的RDB耸三,就可以應對大部分業(yè)務了乱陡。
參考資料:
https://redis.io/topics/persistence
http://doc.redisfans.com/topic/persistence.html
https://blog.csdn.net/mishifangxiangdefeng/article/details/48977269
https://zhuanlan.zhihu.com/p/68402040
http://www.reibang.com/p/95bad8db1af3