百度
360搜索
搜狗搜索

redis持久化方案,Redis持久化的几种方式——深入解析RDB详细介绍

本文目录一览: redis怎么做持久化

Redis是一种高级key-value数据库。它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富。有字符串,链表,集 合和有序集合。支持在服务器端计算集合的并,交和补集(difference)等,还支持多种排序功能。所以Redis也可以被看成是一个数据结构服务 器。Redis的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上(这称为“半持久化模式”);也可以把每一次数据变化都写入到一个append only file(aof)里面(这称为“全持久化模式”)。 由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能,将数据保存到磁盘上,当redis重启后,可以从磁盘中恢复数据。redis提供两种方式进行持久化,一种是RDB持久化(原理是将Reids在内存中的数据库记录定时dump到磁盘上的RDB持久化),另外一种是AOF(append only file)持久化(原理是将Reids的操作日志以追加的方式写入文件)。Redis跟memcache不同的是,储存在Redis中的数据是持久化的,断电或重启后,数据也不会丢失。因为Redis的存储分为内存存储、磁盘存储和log文件三部分,重启后,Redis可以从磁盘重新将数据加载到内存中,这些可以通过配置文件对其进行配置,正因为这样,Redis才能实现持久化。

一般在自动化驾驶项目中redis的持久化机制使用什么?

在自动驾驶项目中,Redis通常用作高速缓存和持久化存储的解决方案。Redis可以将数据存储在内存中以提高读写速度,同时还提供了不同的持久化选项以确保数据持久性。
在Redis中,提供两种持久化机制:RDB(Redis DataBase)和AOF(Append Only File)。
RDB:RDB是一种快照持久化机制,它可以将Redis的内存数据周期性地写入磁盘上的一个文件中。RDB持久化机制通过fork出一个子进程来完成持久化操作,这个子进程会先将内存数据写入到一个临时文件中,然后再用这个临时文件替换掉旧的持久化文件。RDB机制的优点是持久化的文件相对较小,且恢复数据的速度相对较快。
AOF:AOF是一种日志持久化机制,它记录了Redis服务器所执行的所有写操作。AOF持久化机制将Redis的操作追加到一个只进行追加操作的文件中,因此可以保证每次写操作都被完整地记录下来。当Redis需要恢复数据时,会重新执行所有的写操作,以此来还原数据。AOF机制的优点是可以提供更好的数据安全性,但是由于要记录每个写操作,文件通常比RDB文件更大。
综合来说,RDB持久化机制适合对数据备份有较高要求的场景,而AOF持久化机制适合对数据完整性有较高要求的场景。一些应用场景可以同时使用两种持久化机制,既保证数据的安全性,也保证了性能。

Redis持久化的几种方式——RDB深入解析

点击上方“Java中文社群”,选择“设为星标”终身学习者,以编程为乐!Redis 的读写都是在内存中,所以它的性能较高,但在内存中的数据会随着服务器的重启而丢失,为了保证数据不丢失,我们需要将内存中的数据存储到磁盘,以便 Redis 重启时能够从磁盘中恢复原有的数据,而整个过程就叫做 Redis 持久化。Redis 持久化也是 Redis 和 Memcached 的主要区别之一,因为 Memcached 不具备持久化功能。1.持久化的几种方式Redis 持久化拥有以下三种方式:快照方式(RDB, Redis DataBase)将某一个时刻的内存数据,以二进制的方式写入磁盘;文件追加方式(AOF, Append Only File),记录所有的操作命令,并以文本的形式追加到文件中;混合持久化方式,Redis 4.0 之后新增的方式,混合持久化是结合了 RDB 和 AOF 的优点,在写入的时候,先把当前的数据以 RDB 的形式写入文件的开头,再将后续的操作命令以 AOF 的格式存入文件,这样既能保证 Redis 重启时的速度,又能简单数据丢失的风险。因为每种持久化方案,都有特定的使用场景,让我们先从 RDB 持久化说起吧。2.RDB简介RDB(Redis DataBase)是将某一个时刻的内存快照(Snapshot),以二进制的方式写入磁盘的过程。3.持久化触发RDB 的持久化触发方式有两类:一类是手动触发,另一类是自动触发。1)手动触发手动触发持久化的操作有两个:save 和 bgsave ,它们主要区别体现在:是否阻塞 Redis 主线程的执行。① save 命令在客户端中执行 save 命令,就会触发 Redis 的持久化,但同时也是使 Redis 处于阻塞状态,直到 RDB 持久化完成,才会响应其他客户端发来的命令,所以在生产环境一定要慎用。save 命令使用如下:从图片可以看出,当执行完 save 命令之后,持久化文件 dump.rdb 的修改时间就变了,这就表示 save 成功的触发了 RDB 持久化。save 命令执行流程,如下图所示:② bgsave 命令bgsave(background save)既后台保存的意思, 它和 save 命令最大的区别就是 bgsave 会 fork() 一个子进程来执行持久化,整个过程中只有在 fork() 子进程时有短暂的阻塞,当子进程被创建之后,Redis 的主进程就可以响应其他客户端的请求了,相对于整个流程都阻塞的 save 命令来说,显然 bgsave 命令更适合我们使用。bgsave 命令使用,如下图所示:bgsave 执行流程,如下图所示:2)自动触发说完了 RDB 的手动触发方式,下面来看如何自动触发 RDB 持久化?RDB 自动持久化主要来源于以下几种情况。① save m nsave m n 是指在 m 秒内,如果有 n 个键发生改变,则自动触发持久化。参数 m 和 n 可以在 Redis 的配置文件中找到,例如, save601 则表明在 60 秒内,至少有一个键发生改变,就会触发 RDB 持久化。自动触发持久化,本质是 Redis 通过判断,如果满足设置的触发条件,自动执行一次 bgsave 命令。注意:当设置多个 save m n 命令时,满足任意一个条件都会触发持久化。例如,我们设置了以下两个 save m n 命令:save 60 10save 600 1当 60s 内如果有 10 次 Redis 键值发生改变,就会触发持久化;如果 60s 内 Redis 的键值改变次数少于 10 次,那么 Redis 就会判断 600s 内,Redis 的键值是否至少被修改了一次,如果满足则会触发持久化。② flushallflushall 命令用于清空 Redis 数据库,在生产环境下一定慎用,当 Redis 执行了 flushall 命令之后,则会触发自动持久化,把 RDB 文件清空。执行结果如下图所示:③ 主从同步触发在 Redis 主从复制中,当从节点执行全量复制操作时,主节点会执行 bgsave 命令,并将 RDB 文件发送给从节点,该过程会自动触发 Redis 持久化。4.配置说明合理的设置 RDB 的配置,可以保障 Redis 高效且稳定的运行,下面一起来看 RDB 的配置项都有哪些?RDB 配置参数可以在 Redis 的配置文件中找见,具体内容如下:# RDB 保存的条件save 9001save 30010save 6010000# bgsave 失败之后,是否停止持久化数据到磁盘,yes 表示停止持久化,no 表示忽略错误继续写文件。stop-writes-on-bgsave-error yes# RDB 文件压缩rdbcompression yes# 写入文件和读取文件时是否开启 RDB 文件检查,检查是否有无损坏,如果在启动是检查发现损坏,则停止启动。rdbchecksum yes# RDB 文件名dbfilename dump.rdb# RDB 文件目录dir ./其中比较重要的参数如下列表:① save 参数它是用来配置触发 RDB 持久化条件的参数,满足保存条件时将会把数据持久化到硬盘。默认配置说明如下:save 900 1:表示 900 秒内如果至少有 1 个 key 值变化,则把数据持久化到硬盘;save 300 10:表示 300 秒内如果至少有 10 个 key 值变化,则把数据持久化到硬盘;save 60 10000:表示 60 秒内如果至少有 10000 个 key 值变化,则把数据持久化到硬盘。② rdbcompression 参数它的默认值是 yes 表示开启 RDB 文件压缩,Redis 会采用 LZF 算法进行压缩。如果不想消耗 CPU 性能来进行文件压缩的话,可以设置为关闭此功能,这样的缺点是需要更多的磁盘空间来保存文件。③ rdbchecksum 参数它的默认值为 yes 表示写入文件和读取文件时是否开启 RDB 文件检查,检查是否有无损坏,如果在启动是检查发现损坏,则停止启动。5.配置查询Redis 中可以使用命令查询当前配置参数。查询命令的格式为:configgetxxx ,例如,想要获取 RDB 文件的存储名称设置,可以使用 configgetdbfilename ,执行效果如下图所示:查询 RDB 的文件目录,可使用命令 configgetdir ,执行效果如下图所示:6.配置设置设置 RDB 的配置,可以通过以下两种方式:手动修改 Redis 配置文件;使用命令行设置,例如,使用 configsetdir"/usr/data" 就是用于修改 RDB 的存储目录。注意:手动修改 Redis 配置文件的方式是全局生效的,即重启 Redis 服务器设置参数也不会丢失,而使用命令修改的方式,在 Redis 重启之后就会丢失。但手动修改 Redis 配置文件,想要立即生效需要重启 Redis 服务器,而命令的方式则不需要重启 Redis 服务器。小贴士:Redis 的配置文件位于 Redis 安装目录的根路径下,默认名称为 redis.conf。7.RDB 文件恢复当 Redis 服务器启动时,如果 Redis 根目录存在 RDB 文件 dump.rdb,Redis 就会自动加载 RDB 文件恢复持久化数据。如果根目录没有 dump.rdb 文件,请先将 dump.rdb 文件移动到 Redis 的根目录。验证 RDB 文件是否被加载Redis 在启动时有日志信息,会显示是否加载了 RDB 文件,我们执行 Redis 启动命令:src/redis-server redis.conf ,如下图所示:从日志上可以看出, Redis 服务在启动时已经正常加载了 RDB 文件。小贴士:Redis 服务器在载入 RDB 文件期间,会一直处于阻塞状态,直到载入工作完成为止。8.RDB 优缺点1)RDB 优点RDB 的内容为二进制的数据,占用内存更小,更紧凑,更适合做为备份文件;RDB 对灾难恢复非常有用,它是一个紧凑的文件,可以更快的传输到远程服务器进行 Redis 服务恢复;RDB 可以更大程度的提高 Redis 的运行速度,因为每次持久化时 Redis 主进程都会 fork() 一个子进程,进行数据持久化到磁盘,Redis 主进程并不会执行磁盘 I/O 等操作;与 AOF 格式的文件相比,RDB 文件可以更快的重启。2)RDB 缺点因为 RDB 只能保存某个时间间隔的数据,如果中途 Redis 服务被意外终止了,则会丢失一段时间内的 Redis 数据;RDB 需要经常 fork() 才能使用子进程将其持久化在磁盘上。如果数据集很大,fork() 可能很耗时,并且如果数据集很大且 CPU 性能不佳,则可能导致 Redis 停止为客户端服务几毫秒甚至一秒钟。9.禁用持久化禁用持久化可以提高 Redis 的执行效率,如果对数据丢失不敏感的情况下,可以在连接客户端的情况下,执行 configsetsave"" 命令即可禁用 Redis 的持久化,如下图所示:10.小结通过本文我们可以得知,RDB 持久化分为手动触发和自动触发两种方式,它的优点是存储文件小,Redis 启动时恢复数据比较快,缺点是有丢失数据的风险。RDB 文件的恢复也很简单,只需要把 RDB 文件放到 Redis 的根目录,在 Redis 启动时就会自动加载并恢复数据。11.思考题如果 Redis 服务器 CPU 占用过高,可能是什么原因导致的?欢迎各位读者在评论区,写下自己的答案。【END】关注下方二维码,订阅更多精彩内容老王著转发更佳稀罕作者Redis持久化的几种方式——RDB深入解析标签:创建读取文件选择手动err注意验证备份文件编程

阅读更多 >>>  大数据采集分析是什么

Redis如何实现持久化方案(RDB和AOF使用)

以上三条符合任意一条,就自动生成rdb,内部使用bgsave#配置:save 900 1 #配置一条save 300 10 #配置一条save 60 10000 #配置一条dbfilename dump.rdb #rdb文件的名字,默认为dump.rdbdir ./ #rdb文件存在当前目录stop-writes-on-bgsave-error yes #如果bgsave出现错误,是否停止写入,默认为yesrdbcompression yes #采用压缩格式rdbchecksum yes #是否对rdb文件进行校验和检验#最佳配置save 900 1 save 300 10 save 60 10000 dbfilename dump-${port}.rdb #以端口号作为文件名,可能一台机器上很多reids,不会乱dir /bigdiskpath #保存路径放到一个大硬盘位置目录stop-writes-on-bgsave-error yes#出现错误停止rdbcompression yes #压缩rdbchecksum yes #校验RDB触发机制一般使用第三种方式,但是这种方式也会有缺点。如果修改的条数没有在设置范围内那么就不会触发,就会引发很多数据没有持久化的情况。所以我们一般采用下面方式:AOF。如果是保存不重要的数据可以使用RDB方式(比如缓存数据),如果是保存很重要的数据就要使用AOF,但是两种方式也可以同时使用。三、AOF1.RDB问题耗时,耗性能。不可控,可能会丢失数据。2.AOF介绍客户端每写入一条命令,都记录一条日志,放到日志文件中,如果出现宕机,可以将数据完全恢复3.AOF的三种策略日志不是直接写到硬盘上,而是先放在缓冲区,缓冲区根据一些策略,写到硬盘上#第一种:always:redis--》写命令刷新的缓冲区---》每条命令fsync到硬盘---》AOF文件#第二种:everysec(默认值):redis——》写命令刷新的缓冲区---》每秒把缓冲区fsync到硬盘--》AOF文件#第三种:no:redis——》写命令刷新的缓冲区---》操作系统决定,缓冲区fsync到硬盘--》AOF文件命令alwayseverysecno优点不丢失数据 每秒一次fsync,丢失1秒数据 不用管 缺点 IO开销大,一般的sata盘只有几百TPS丢1秒数据不可控4.AOF重写随着命令的逐步写入,并发量的变大, AOF文件会越来越大,通过AOF重写来解决该问题原生AOFAOF重写set hello world
set hello java
set hello hehe
incr counter
ncr counter
rpush mylist a
rpush mylist b
rpush mylist c
过期数据set hello hehe
set counter 2
rpush mylist a b c 本质就是把过期的,无用的,重复的,可以优化的命令,来优化这样可以减少磁盘占用量,加速恢复速度实现方式bgrewriteaof:客户端向服务端发送bgrewriteaof命令,服务端会起一个fork进程,完成AOF重写AOF重写配置:重写流程AOF配置文件 (******)appendonly yes #将该选项设置为yes,打开appendfilename "appendonly-${port}.aof" #文件保存的名字appendfsync everysec #采用第二种策略dir /bigdiskpath #存放的路径no-appendfsync-on-rewrite yes #在aof重写的时候,是否要做aof的append操作,因为aof重写消耗性能,磁盘消耗,正常aof写磁盘有一定的冲突,这段期间的数据,允许丢失四、RDB和AOF的选择1.rdb和aof的比较命令rdbaof启动优先级低 高(挂掉重启,会加载aof的数据) 体积小 大恢复速度 快慢数据安全性 丢数据 根据策略决定 轻重 重 轻2.rdb最佳策略rdb关掉,主从操作时集中管理:按天,按小时备份数据主从配置,从节点打开3.aof最佳策略开:缓存和存储,大部分情况都打开,aof重写集中管理everysec:通过每秒刷新的策略4.最佳策略小分片:每个redis的最大内存为4g缓存或存储:根据特性,使用不通策略时时监控硬盘,内存,负载网络等有足够内存

Redis持久化的几种方式——深入解析RDB

Redis 持久化也是 Redis?和 Memcached 的主要区别之一,因为 Memcached?是不具备持久化功能的。1.持久化的几种方式Redis 持久化拥有以下三种方式:快照方式(RDB, Redis DataBase)将某一个时刻的内存数据,以二进制的方式写入磁盘;文件追加方式(AOF, Append Only File),记录所有的操作命令,并以文本的形式追加到文件中;混合持久化方式,Redis 4.0 之后新增的方式,混合持久化是结合了 RDB 和 AOF 的优点,在写入的时候,先把当前的数据以 RDB 的形式写入文件的开头,再将后续的操作命令以 AOF 的格式存入文件,这样既能保证?Redis?重启时的速度,又能简单数据丢失的风险。因为每种持久化方案,都有特定的使用场景,让我们先从 RDB?持久化说起吧。2.RDB简介RDB(Redis DataBase)是将某一个时刻的内存快照(Snapshot),以二进制的方式写入磁盘的过程。3.持久化触发RDB?的持久化触发方式有两类:一类是手动触发,另一类是自动触发。1)手动触发手动触发持久化的操作有两个: save?和 bgsave,它们主要区别体现在:是否阻塞?Redis?主线程的执行。① save?命令在客户端中执行 save?命令,就会触发 Redis 的持久化,但同时也是使 Redis 处于阻塞状态,直到 RDB?持久化完成,才会响应其他客户端发来的命令,所以在生产环境一定要慎用。save?命令使用如下:从图片可以看出,当执行完?save?命令之后,持久化文件 dump.rdb?的修改时间就变了,这就表示 save?成功的触发了?RDB 持久化。save?命令执行流程,如下图所示:② bgsave?命令bgsave(background save)既后台保存的意思, 它和 save?命令最大的区别就是 bgsave?会 fork() 一个子进程来执行持久化,整个过程中只有在 fork() 子进程时有短暂的阻塞,当子进程被创建之后,Redis 的主进程就可以响应其他客户端的请求了,相对于整个流程都阻塞的?save?命令来说,显然?bgsave?命令更适合我们使用。bgsave?命令使用,如下图所示:bgsave?执行流程,如下图所示:2)自动触发说完了?RDB?的手动触发方式,下面来看如何自动触发?RDB?持久化?RDB?自动持久化主要来源于以下几种情况。① save m nsave m n?是指在 m 秒内,如果有 n 个键发生改变,则自动触发持久化。参数 m?和?n?可以在?Redis?的配置文件中找到,例如,save 60 1?则表明在 60 秒内,至少有一个键发生改变,就会触发?RDB?持久化。自动触发持久化,本质是?Redis?通过判断,如果满足设置的触发条件,自动执行一次?bgsave?命令。注意:当设置多个 save m n 命令时,满足任意一个条件都会触发持久化。例如,我们设置了以下两个 save m n 命令:save 60 10save 600 1当 60s 内如果有 10 次 Redis 键值发生改变,就会触发持久化;如果 60s 内 Redis 的键值改变次数少于 10 次,那么 Redis 就会判断 600s 内,Redis 的键值是否至少被修改了一次,如果满足则会触发持久化。② flushallflushall?命令用于清空 Redis 数据库,在生产环境下一定慎用,当 Redis 执行了 flushall?命令之后,则会触发自动持久化,把?RDB 文件清空。执行结果如下图所示:③ 主从同步触发在 Redis 主从复制中,当从节点执行全量复制操作时,主节点会执行 bgsave?命令,并将 RDB 文件发送给从节点,该过程会自动触发 Redis 持久化。4.配置说明合理的设置 RDB 的配置,可以保障 Redis 高效且稳定的运行,下面一起来看 RDB 的配置项都有哪些?RDB 配置参数可以在? Redis 的配置文件中找见,具体内容如下:# RDB 保存的条件save 900 1save 300 10save 60 10000# bgsave 失败之后,是否停止持久化数据到磁盘,yes 表示停止持久化,no 表示忽略错误继续写文件。stop-writes-on-bgsave-error yes# RDB 文件压缩rdbcompression yes# 写入文件和读取文件时是否开启 RDB 文件检查,检查是否有无损坏,如果在启动是检查发现损坏,则停止启动。rdbchecksum yes# RDB 文件名dbfilename dump.rdb# RDB 文件目录dir ./其中比较重要的参数如下列表:① save 参数它是用来配置触发 RDB 持久化条件的参数,满足保存条件时将会把数据持久化到硬盘。默认配置说明如下:save 900 1:表示 900 秒内如果至少有 1 个 key 值变化,则把数据持久化到硬盘;save 300 10:表示 300 秒内如果至少有 10 个 key 值变化,则把数据持久化到硬盘;save 60 10000:表示 60 秒内如果至少有 10000 个 key 值变化,则把数据持久化到硬盘。② rdbcompression 参数它的默认值是 yes?表示开启 RDB 文件压缩,Redis 会采用 LZF 算法进行压缩。如果不想消耗 CPU 性能来进行文件压缩的话,可以设置为关闭此功能,这样的缺点是需要更多的磁盘空间来保存文件。③ rdbchecksum 参数它的默认值为 yes?表示写入文件和读取文件时是否开启 RDB 文件检查,检查是否有无损坏,如果在启动是检查发现损坏,则停止启动。5.配置查询Redis 中可以使用命令查询当前配置参数。查询命令的格式为:config get xxx,例如,想要获取 RDB 文件的存储名称设置,可以使用 config get dbfilename,执行效果如下图所示:查询 RDB 的文件目录,可使用命令 config get dir,执行效果如下图所示:6.配置设置设置 RDB 的配置,可以通过以下两种方式:手动修改 Redis 配置文件;使用命令行设置,例如,使用?config set dir "/usr/data"?就是用于修改 RDB 的存储目录。注意:手动修改 Redis 配置文件的方式是全局生效的,即重启?Redis?服务器设置参数也不会丢失,而使用命令修改的方式,在 Redis 重启之后就会丢失。但手动修改?Redis?配置文件,想要立即生效需要重启?Redis?服务器,而命令的方式则不需要重启?Redis?服务器。小贴士:Redis?的配置文件位于?Redis?安装目录的根路径下,默认名称为 redis.conf。7.RDB 文件恢复当?Redis?服务器启动时,如果 Redis 根目录存在?RDB?文件 dump.rdb,Redis 就会自动加载 RDB 文件恢复持久化数据。如果根目录没有?dump.rdb 文件,请先将 dump.rdb?文件移动到 Redis 的根目录。验证?RDB?文件是否被加载Redis?在启动时有日志信息,会显示是否加载了?RDB?文件,我们执行 Redis 启动命令:src/redis-server redis.conf,如下图所示:从日志上可以看出, Redis 服务在启动时已经正常加载了 RDB 文件。小贴士:Redis 服务器在载入 RDB 文件期间,会一直处于阻塞状态,直到载入工作完成为止。8.RDB 优缺点1)RDB 优点RDB 的内容为二进制的数据,占用内存更小,更紧凑,更适合做为备份文件;RDB 对灾难恢复非常有用,它是一个紧凑的文件,可以更快的传输到远程服务器进行 Redis 服务恢复;RDB 可以更大程度的提高 Redis 的运行速度,因为每次持久化时 Redis 主进程都会 fork() 一个子进程,进行数据持久化到磁盘,Redis 主进程并不会执行磁盘 I/O 等操作;与 AOF 格式的文件相比,RDB 文件可以更快的重启。2)RDB 缺点因为 RDB 只能保存某个时间间隔的数据,如果中途 Redis 服务被意外终止了,则会丢失一段时间内的 Redis 数据;RDB 需要经常 fork() 才能使用子进程将其持久化在磁盘上。如果数据集很大,fork() 可能很耗时,并且如果数据集很大且 CPU 性能不佳,则可能导致 Redis 停止为客户端服务几毫秒甚至一秒钟。9.禁用持久化禁用持久化可以提高 Redis 的执行效率,如果对数据丢失不敏感的情况下,可以在连接客户端的情况下,执行 config set save ""?命令即可禁用 Redis 的持久化,如下图所示:10.小结通过本文我们可以得知,RDB?持久化分为手动触发和自动触发两种方式,它的优点是存储文件小,Redis?启动时恢复数据比较快,缺点是有丢失数据的风险。RDB?文件的恢复也很简单,只需要把?RDB?文件放到?Redis?的根目录,在?Redis?启动时就会自动加载并恢复数据。11.思考题如果?Redis?服务器?CPU?占用过高,可能是什么原因导致的?欢迎各位在评论区,写下你们的答案。12.参考&鸣谢https://redis.io/topics/persistencehttps://blog.csdn.net/qq_36318234/article/details/79994133https://www.cnblogs.com/ysocean/p/9114268.htmlhttps://www.cnblogs.com/wdliu/p/9377278.htmlRedis持久化的几种方式——深入解析RDB标签:默认使用命令阻塞复数启动获取日志信息red小结

阅读更多 >>>  手机怎么弄行程大数据

Redis持久化策略(看这篇,你肯定会有所获)

RDB:Redis DataBase , 记录快照

????????RDB是redis 默认的持久化方案. RDB 是当满足一定条件时, 就会将redis内存中的数据写入磁盘,并生成一个快照文件dump.rdb 文件.Redis 重启会通过加载dump.rdb文件恢复数据.

????????一定条件分为以下几种情况: 1.自动触发? 2. 手动触发 . 下面分开说明下:

a).redis.conf 中?SNAPSHOTTING 其中定义了触发把数据保存到磁盘的触发频率.

????????如果不需要rdb 方案, 注释save 或者配置成空字符串" ".

????????save 900 1 #900秒内至少有一个key被修改(包括添加)

????????save 300 10 #400秒内至少10个key被修改

????????save 10000 #60秒内至少有10000个key 被修改.

????????这三条配置不冲突, 只要满足一条就触发.

????????rdb 文件位置和目录 (默认在安装根目录下)?

????????#文件路径

????????dir ./

????????#文件名称

????????dbfilename dump.rdb

????????#是否以LZY压缩rdb 文件

????????rdbcompression yes?

????????#开启数据校验

????????rdbchecksum yes

b) shutdown触发 ,保证服务器正常关闭.

c) flushall , rdb文件是空的, 会生成一个空的文件,所以这种情况也没有什么意义.但需要知道,这种情况下

会触发生成rdb文件.

Redis 提供了两条命令: save 和 bgsave

a). save 命令

????????save 在生成快照的时候会阻塞当前Redis 服务器,Redis不能处理其他命令.如果内存数据较多,会造成

b).bgsave 命令

????????执行bgsave命令时,? ?Redis会在后台进行异步快照操作,快照同时还可以响应客户端请求.

具体操作

? ? ? ? 具体操作:Redis进程会执行fork操作创建子进程(copy-on-write),RDB 持久化过程由子进程负载,完成后自动结束.它不会记录fork之后产生的记录.阻塞只发送在fork阶段,一般时间较短.

一.优势

? ? 1.RDB是一个非常紧凑的文件,它保存了Redis在某个时间点上的数据集.这种文件非常适合进行备份和

灾难恢复.

? ? 2.生成RDB文件的时候,redis主进程会fork()一个子进程来处理所有保存的工作,主进程不需要进行任何

IO操作.

? ? 3.RDB在恢复大数据集时的速度比AOF的恢复速度要快

二.劣势

? ? 1).RDB 没办法做到实时持久化/妙级持久化.因为bgsave每次运行都要执行fork创建子进程,频繁执行成本过高.????

? ? 2).在一定间隔时间做一次备份,所以如果Redis 以为down掉的话,就会丢失最后一次快照之后所有修改

(数据有丢失)

AOF:

, 记录日志

Redis 默认不开启.AOF采用日志的形式来记录每个写操作,并追加到文件中.开启后,执行更改Redis? ? 命令时,就会把命令写入到AOF文件中.

Redis 重启时会根据日志文件的内容把写指令从前往后执行一次以完成数据的恢复工作.

#开关

appendonly no

#文件名

appendfilename "appendonly.aof"

????????由于操作系统缓存机制,AOF数据并没有真正地写入硬盘,而是进入了系统的硬盘缓存.什么时候

把缓冲区的内容写入到AOF文件中? 由下面参数决定

appendfsync 😕 值: no? \ always \everysec?

????????no: 表示不执行fync, 由操作系统保证数据同步到磁盘,速度最快,但是不安全.

????????always:表示每次写入都执行fync,以保证数据同步到磁盘,效率很低

????????everysec:表示每秒执行以fync ,可能会导致丢失1s数据.通常选择everysec,兼顾效率和安全性.

? ? 因为AOF文件只有一个, 随着redis 不断进行,AOF 的文件会越来越大,文件越大, 文件占用服务器内存

以及AOF恢复要求时间越长.

? ? 为了解决这个问题,可以使用bgwriteaof来重写.那什么时候重写? 又是怎样重写?

? ? 一. 什么时候重写?

? ? #重写触发机制

? ? auto-aof-rewrite-percentage 100 默认值是100. 当前aof 文件大小超过 上一次重写的aof文件大小百分之多少进行重写,即当aof文件增长到一定大小时,Redis能够调用bgwriteaof对日志文件进行重写.当前aof文件大小是上次日志重写得到aof文件大小的二倍时, 自动启动新的日志重写过程.

? ? auto-aof-rewrite-min-size 默认是64M.设置允许重写的最小aof文件大小,避免达到了约定百分比 但尺寸

仍然很小的情况还要重写.

? ?二. 怎样重写?

? ? 并不是对原文件进行重新整理,而是直接读取服务器上现有的键值对,然后用一条命令去代替之间记录这

个键值对的多条命令,生成一个新的文件后去替换原来的 AOF文件.

? ? 看下面这两个参数:

? ? ? ? no-appendfsync-on-rewrite

? ? ? ? aof-load-truncated

? ?AOF 数据恢复

? ? ? ? 重启Redis之后就会进行AOF文件恢复.

? ?AOF 的优势和劣势

优点:

1.AOF 持久化的方法提供了多种的同步频率,即使使用默认的同步频率每秒同步一次,Redis最多也就丢失

1秒的数据.

缺点:

1.对于具有相同数据的Redis, AOF文件通常比RDF文件体积更大(RDB存的是数据快照)

2.虽然AOF提供了多种同步的频率,默认的情况下,没秒同步一次的频率也具有较高的性能.在高并发的情况下,RDB比AOF具有更好的性能.

????????如果可以忍一小段时间数据的丢失,毫无疑问使用RDB 是最好的,定时生成RDB快照非常便于进行数据备份,而且RDB恢复数据集的速度也要比AOF恢复速度要快.

? ? ? ? 否则就要使用AOF重写.但是一般情况下建议不要单独使用某一种持久化机制,而是两种一起用.

本文内容来自咕泡学院-青山老师,感谢青山老师!!

Redis持久化的方式有哪些?优缺点分别是什么?

?? 持久化的目的主要是做灾难恢复,数据恢复。由于Redis的数据全都放在内存里面,如果Redis挂了,没有配置持久化的话,重启的时候数据会全部丢失。 ? ? 突然间,大量的请求过来,缓存全都无法命中,造成缓存雪崩,mysql无法承载大量的请求,造成整个系统崩溃。如果把Redis持久化做好,即使Redis故障了,也能够立即重启,对外提供服务。 Redis持久化分为两种:
AOF持久化配置: ? ? 在Redis的配置文件中存在三种同步方式,它们分别是:
RDB的优缺点:
AOF的优缺点:
RDB和AOF如何选择?
rdb是Redis DataBase缩写 功能核心函数rdbSave(生成RDB文件)和rdbLoad(从文件加载内存)两个函数
Aof是Append-only file缩写 每当执行服务器(定时)任务或者函数时flushAppendOnlyFile 函数都会被调用, 这个函数执行以下两个工作 aof写入保存: WRITE:根据条件,将 aof_buf 中的缓存写入到 AOF 文件 SAVE:根据条件,调用 fsync 或 fdatasync 函数,将 AOF 文件保存到磁盘中。
存储结构: 内容是redis通讯协议(RESP )格式的命令文本存储。
比较: 1、aof文件比rdb更新频率高,优先使用aof还原数据。 2、aof比rdb更安全也更大 3、rdb性能比aof好 4、如果两个都配了优先加载AOF

Redis持久化的方式选择与原理

通常Redis将数据存储在内存中或虚拟内存中,但它提供了数据持久化功能可以把内存中的数据持久化到磁盘。持久化有什么好处呢?比如可以保证断电后数据不会丢失,升级服务器也会变得更加方便。
1.RDB 持久化机制 :是对 redis 数据执行周期性的持久化。
这种方式就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为 dump.rdb。客户端也可以使用save或者bgsave命令通知redis做一次快照持久化。save操作是在主线程中保存快照的,由于redis是用一个主线程来处理所有客户端的请求,这种方式会阻塞所有客户端请求。所以不推荐使用。另一点需要注意的是,每次快照持久化都是将内存数据完整写入到磁盘一次,并不是增量的只同步增量数据。如果数据量大的话,写操作会比较多,必然会引起大量的磁盘IO操作,可能会严重影响性能。
2.AOF持久化机制 :AOF 机制对每条写入命令作为日志,以 append-only 的模式写入一个日志文件中,在 redis 重启的时候,可以通过回放 AOF 日志中的写入指令来重新构建整个数据集。当然由于操作系统会在内核中缓存write做的修改,所以可能不是立即写到磁盘上。这样的持久化还是有可能会丢失部分修改。不过我们可以通过配置文件告诉 redis我们想要通过fsync函数强制操作系统写入到磁盘的时机。
appendonly yes //启用日志追加持久化方式
(1)appendfsync always //收到写命令就立即强制写入磁盘。最慢的,但是保证完全持久化,不推荐使用。
(2)appendfsync everysec //每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐使用。
(3)appendfsync no //完全依赖操作系统,性能最好,持久化没保证。
通过 RDB 或 AOF,都可以将 redis 内存中的数据持久化到磁盘上面来,然后可以将这些数据备份到别的地方去。
1.RDB方式
优点:
缺点:
2.AOF方式
优点:
缺点:
不要仅仅使用 RDB,因为那样会导致你丢失很多数据;也不要仅仅使用 AOF,因为那样有两个问题:第一,你通过 AOF 做冷备,没有 RDB 做冷备来的恢复速度更快;第二,RDB 每次简单粗暴生成数据快照,更加健壮,可以避免 AOF 这种复杂的备份和恢复机制的 bug;redis 支持同时开启开启两种持久化方式,我们可以综合使用 AOF 和 RDB 两种持久化机制,用 AOF 来保证数据不丢失,作为数据恢复的第一选择; 用 RDB 来做不同程度的冷备,在 AOF 文件都丢失或损坏不可用的时候,还可以使用 RDB 来进行快速的数据恢复。
出处: https://www.cnblogs.com/bigbaby/p/15879126.html

阅读更多 >>>  数据共享应遵循什么原理(数据共享应遵循哪些原理?)

面试中问到Redis持久化的原理,本篇在做详细解答

我们知道redis是一个 高效的分布式内存数据库 ,由于是操作内存所以性能非常之快,通常用它来做分布式缓存,用来提高微服务的高性能,但是因为是内存操作,所以当出现服务器故障,断电等情况就会造成 内存数据丢失 ,不可恢复,因此redis 引入了持久化机制来将内存数据写入磁盘,从而保障了Redis的数据不被丢失。
Redis有两种持久化的方式,一种是RDB,另外种是AOF。
RDB是将Redis内存中数据的快照存储在磁盘内,是Redis的默认持久化方案。
RDB持久化默认有三种策略
可在redis.conf中配置,会以一段时间内达到指定修改的次数为规则来触发快照操作,快照文件名为dump.rdb。每当Redis服务重启的时候都会从该文件中把数据加载到内存中。
在60秒内有10000次操作即触发RDB持久化。
没有满足第一种条件时,在900秒内有1次操作即触发RDB持久化。
没有满足第二种条件时,在300秒内有10次操作即触发RDB持久化。
RDB持久化除了可以根据配置中的策略来触发外,还可以使用save和bgsave命令手动来触发。这两个命令的区别在于save会阻塞服务器进程。在执行save命令的过程中,服务器不能处理任何请求,但是bgsave(background save,后台保存)命令会通过一个子进程在后台处理数据RDB持久化。本质上save和bgsave调用的都是rdbSave函数,所以Redis不允许save和bgsave命令同时执行,当然这也是为了避免RDB文件数据出现不一致性的问题。
每次都是一个大文件,备份写入IO操作笔记大,很容易耗时,影响进程资源使用。
如果最近一次进程崩溃,那么最近一次数据备份后的数据就被丢失。
文件直接就可以当冷备使用
AOF(Append Only File)以独立日志的方式记录每次的写命令,可以很好地解决了数据持久化的实时性。系统重启时可以重新执行AOF文件中的命令来恢复数据。AOF会先把命令追加在AOF缓冲区,然后根据对应策略写入硬盘。
AOF的实现流程有三个步骤
步骤一
把命令追加到AOF缓冲区,
步骤二
将缓冲区的内容写入程序缓冲区
步骤三
将程序缓冲区的内容写入文件
当AOF持久化功能处于开启状态时,服务器每执行完一个命令就会将命令以协议格式追加写入redisServer结构体的aof_buf缓冲区。而在服务重启的时候会把AOF文件加载到缓冲区中。
AOF有 三种触发机制
·always:每次发生数据变更都会被立即记录到磁盘,性能较差,但数据完整性比较好。
·everysec:每秒钟将aof_buf缓冲区的内容写入AOF文件,如果宕机,就会有1秒内的数据丢失。
·no:将数据同步操作交给操作系统来处理,性能最好,但是数据可靠性最差。在配置文件中设置appendonly=yes后,若没有指定apendfsync,默认会使用everysec选项。
写入指令随着时间的推移,记录了很多重复的指令,导致数据量非常大。
RDB优先级高于AOF
RDB小,AOF较大
RDB慢,AOF快
RDB快,AOF慢

网站数据信息

"redis持久化方案,Redis持久化的几种方式——深入解析RDB"浏览人数已经达到18次,如你需要查询该站的相关权重信息,可以点击进入"Chinaz数据" 查询。更多网站价值评估因素如:redis持久化方案,Redis持久化的几种方式——深入解析RDB的访问速度、搜索引擎收录以及索引量、用户体验等。 要评估一个站的价值,最主要还是需要根据您自身的需求,如网站IP、PV、跳出率等!