天津网站建设普斯泰,建站公司最新价格,网站用途说明,贵州省城乡建设局网站查Redis的持久化是什么
Redis 的数据全部在内存里#xff0c;如果突然宕机#xff0c;数据就会全部丢失#xff0c;因此必须有一种机制来保证 Redis 的数据不会因为故障而丢失#xff0c;这种机制就是 Redis 的持久化机制。
Redis 的持久化机制有三种 AOF日志#xff1a;每…Redis的持久化是什么
Redis 的数据全部在内存里如果突然宕机数据就会全部丢失因此必须有一种机制来保证 Redis 的数据不会因为故障而丢失这种机制就是 Redis 的持久化机制。
Redis 的持久化机制有三种 AOF日志每执行一条写操作指令就把该指令记录到一个文件中RDB快照将某一时刻的内存数据以二进制方式写入磁盘混合持久化方式Redis4.0新增集成了AOF和RDB的优点 AOF日志如何实现
AOF日志是持续增量的备份是基于写命令存储的可读的文本文件。AOF日志会在持续运行中持续增大由于Redis重启过程需要优先加载AOF日志进行指令重放以恢复数据恢复时间会无比漫长。所以需要定期进行AOF重写对AOF日志进行瘦身。目前AOF是Redis持久化的主流方式。
AOF默认是关闭的通过redis.conf配置文件进行开启 优点 AOF只是追加写日志文件对服务器性能影响较小速度比RDB要快消耗的内存较少 缺点 AOF方式生成的日志文件太大需要不断AOF重写进行瘦身。即使经过AOF重写瘦身由于文件是文本文件文件体积较大相比于RDB的二进制文件。AOF重演命令式的恢复数据速度显然比RDB要慢。 RDB快照如何实现的
RDB快照是某个时间点的一次全量数据备份是二进制文件在存储上非常紧凑。
RDB执行流程
Redis 使用操作系统的多进程 cow(Copy On Write) 机制来实现RDB快照持久化
执行bgsave命令的时候Redis主进程会检查是否有子进程在执行RDB/AOF持久化任务如果有的话直接返回Redis主进程会fork一个子进程来执行执行RDB操作fork操作会对主进程造成阻塞影响Redis的读写fork操作完成后会发消息给主进程从而不再阻塞主进程。阻塞仅指主进程fork子进程的过程后续子进程执行操作时不会阻塞RDB子进程会根据Redis主进程的内存生成临时的快照文件持久化完成后会使用临时快照文件替换掉原来的RDB文件。该过程中主进程的读写不受影响但Redis的写操作不会同步到主进程的主内存中而是会写到一个临时的内存区域作为一个副本子进程完成RDB持久化后会发消息给主进程通知RDB持久化完成将上阶段内存副本中的增量写数据同步到主内存 优点 RDB文件小非常适合定时备份用于灾难恢复Redis加载RDB文件的速度比AOF快很多因为RDB文件中直接存储的时内存数据而AOF文件中存储的是一条条命令需要重演命令。 缺点 RDB无法做到实时持久化若在两次bgsave间宕机则会丢失区间分钟级的增量数据不适用于实时性要求较高的场景RDB的cow机制中fork子进程属于重量级操作并且会阻塞redis主进程存在老版本的Redis不兼容新版本RDB格式文件的问题 Redis 4.0 混合持久化
仅使用RDB快照方式恢复数据由于快照时间粒度较大时回丢失大量数据。
仅使用AOF重放方式恢复数据日志性能相对 rdb 来说要慢。在 Redis 实例很大的情况下启动需要花费很长的时间。
Redis 4.0 为了解决这个问题带来了一个新的持久化选项——混合持久化。将 rdb 文件的内容和增量的 AOF 日志文件存在一起。这里的 AOF 日志不再是全量的日志而是自持久化开始到持久化结束的这段时间发生的增量 AOF 日志通常这部分 AOF 日志很小。相当于 大量数据使用粗粒度时间上的rdb快照方式性能高恢复时间快。增量数据使用细粒度时间上的AOF日志方式尽量保证数据的不丢失。 在 Redis 重启的时候可以先加载 rdb 的内容然后再重放增量 AOF 日志就可以完全替代之前的 AOF 全量文件重放重启效率因此大幅得到提升。
三种持久化方式没有更好酌情使用即可