redis 持久化

2020-03-26  本文已影响0人  Andy__Dufresne

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作为当下最常用的高性能缓存工具,它的持久化也是很有意思的。
现将redis持久化的内容提炼总结如下(如有疑误,请不吝赐教):

1、redis 持久化有两种方式:RDB和AOF。RDB存的是快照,AOF存的是写库日志。

2、RDB可以使用命令SAVE或者BGSAVE执行,建议写个脚本,定时保存快照,比如保存最近24小时每个小时的快照,保存近30天每天的快照,删除不使用的快照,并且把快照备份到不同的服务器上;

AOF通过在配置文件中配置appendonly yes进行开启,AOF文件也可以执行异地备份,即使命令有缺失或者截断,也没关系。在进行数据恢复时,有的redis版本可以自动跳过截断,不进行处理。有的版本则需要手动使用redis-check-aof命令对日志进行恢复。

3、RDB 通过fork子进程保存快照,对服务可能有一些影响,但绝大部分时间性能都很好;

AOF需要定期fsync,即把磁盘缓冲区的数据刷到文件中,对性能可能有一些影响(fsync通过后台线程完成),但是默认的一秒钟刷一次性能已经很接近RDB了。

AOF还需要定期rewrite,因为日志文件会越来越大(比如一个key一直被修改,实际上只需要最后一次修改命令即可),通过rewrite保证用最少的日志能恢复当前内存中的数据,用这些日志命令替换老的日志文件。

不同版本的redis,有的可以自动rewrite,有的老版本则需要自己不停手动执行rewrite命令。

当然,rewrite也是通过fork子进程来实现的,对服务可能有一些影响。

4、由于RDB是快照,因此如果服务宕机,可能会丢失几分钟的数据,而AOF默认一秒钟fsync,因此服务宕机,只会丢失一秒钟的数据。

根据业务需要进行选取,也可以二者都选。官方不建议只使用AOF,因为恢复较慢。

普通业务只开启RDB就够了,如果是redis cluster集群,可以关闭master的持久化,只开启slave的RDB,就可以应对大部分业务了。

参考资料:
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
https://www.jianshu.com/p/95bad8db1af3

上一篇下一篇

猜你喜欢

热点阅读