为什么要持久化?持久化不会降低性能吗?
持久化主要是为了故障恢复。
会降低一定的性能,但是为了故障恢复,可以接受的牺牲。
持久化: 可以将持久化的文件备份到云服务器。
持久化的两种方式。
1 AOF
每次有命令(写命令)的时候,会追加到1个日志文件里面去。
会先写到linux的os catch,里面去, 然后到一定的时间,才会写到硬盘文件去。
Redis可以调用操作系统的命令,强制将os catch写到硬盘里面去。
只有1个AOF文件,文件会变得越来越大。 随着增长,会生成新的AOF文件。
这个过程是: 文件变得越来越大的时候,Redis会执行AOF rewrite操作,这个操作,会基于当前的内存数据,构造一个比较小的AOF文件,然后将旧的大的AOF文件删除。
恢复过程:执行文件所有的指令。
1秒钟会强制写入到磁盘, 如果发生故障,最多丢失1秒钟的数据;也可以设置每写入1条数据,就同步一次到磁盘,做到数据不丢, 但是这样Redis的QPS就会大幅度降低。
2 RDB
生成文件快照的方式。
定时生成一个全量文件快照的方式。适合做冷备份。
会生成多个文件快照, 可以写个定时的脚本, 将文件快照传输到其他服务器上面去做备份。
可以保证Redis的性能最高, 因为是相隔一段时间才会进行备份。
相隔备份的时长,可以通过配置来设定。
恢复过程: 直接加载文件到内存中。
数据恢复比AOF快。
两次备份之间, 如果发生故障,就会丢掉没有来得及备份的数据。
RDB文件大的时候, 生成的时候会导致数据停止服务,几秒或者其他。
网友评论