更新时间:2021-08-17 10:02:37 来源:极悦 浏览830次
Redis提供了两种方式对数据进行持久化,分别是RDB和AOF。
RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储。
AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾。Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大。
如果你只希望你的数据在服务器运行的时候存在,你也可以不使用任何持久化方式。
你也可以同时开启两种持久化方式,,在这种情况下,当redis重启的时候会优先载入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整。
Redis默认开启RDB的存储方式。
The filename where to dump the DB
dbfilename “dump.rdb”
对于AOF的存储方式redis并没有默认开启。通过配置开启如下:
把注释去掉就开启了AOF的存储方式。
开启RDB方式redis会在指定的时间段内将内存中的数据快照到磁盘中,redis启动时再恢复到内存中。
Redis会单独创建(fork)一个线程,将数据写入到临时文件中,持久化的过程都结束了,在用这个临时文件替换上次的临时文件。
如果需要进行大规模的数据恢复,并且对于数据恢复不是很敏感,RDB的方式比AOF方式更加高效,RDB的缺点就在于最后一次持久化后的数据有可能会丢失。
RDB持久化数据触发配置在redis.conf中:
默认是当一条数据写入时15分钟持久化一次,当10条数据发生变化5分钟(为了测试方便改成了2分钟)持久化一次,当10000条数据发生变化1分钟进行持久化。
RDB存储方式测试:
两分钟后在文件夹中生成了一个dump.rdb的文件,这个就是临时文件,保存该临时文件。
再次清空数据库:
然后删除dum.rdb文件,将dump.rdb.bk文件恢复成dump.rdb。再启动服务器。
如上图所示,redis中的数据已经从dump.rdb中恢复过来了。
以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),
只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis
重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。
注:所有的指令记录也包括flushDB操作,后面会有坑。
在redis中这种存储方式默认是关闭的,需要在redis.conf文件中开启,开启方式在文中已经做了介绍,就不在赘述。
Redis对于AOF存储方式是怎么持久化的在redis.conf也有,如下:
配置文件对于这种方式的持久化有三种方式:
(1)有写操作就写。显然这种方式影响性能。但是数据完整,不会丢数据
(2)不开启。不开启AOF就没意思了
(3)每秒写文件。折中的方式更加合适。但是有可能导致一秒的数据丢失。
AOF采用文件追加方式,文件会越来越大为避免出现此种情况,新增了重写机制,
当AOF文件的大小超过所设定的阈值时,Redis就会启动AOF文件的内容压缩。
AOF文件持续增长而过大时,会fork出一条新进程来将文件重写(也是先写临时文件最后再rename),遍历新进程的内存中数据,每条记录有一条的Set语句。重写aof文件的操作,并没有读取旧的aof文件,而是将整个内存中的数据库内容用命令的方式重写了一个新的aof文件,这点和快照有点类似。
Redis会记录上次重写时的AOF大小,默认配置是当AOF文件大小是上次rewrite后大小的一倍且文件大于64M时触发。
(1)每秒同步。
(2)每修改同步。
(1)AOF文件远大于EDB。
(2)运行效率慢。
(1)写入数据
(2)写入之后在文件夹中出现了AOF文件,再对这个文件进行备份
(3)清空数据库并退出
(4)恢复appendonly.aof文件
(5)启动redis服务器,查看数据
如图所示数据已经恢复。
从刚才测试AOF可以看出两种方式同时开启是使用AOF的存储方式。
当只开启了RBD方式时数据库中有10条数据,当开启了AOF方式之后,由于appendonly.aof文件中没有备份数据,所以启动后如第二个框中框出的所示没有数据。从这里可以看出默认首先使用AOF的存储方式。
AOF是使用文件追加的方式,随着系统使用的越来越久,AOF的文件会越来越大,当AOF的大小超过文件大小所设定的阈值时,Redis就会启动AOF文件内容压缩,只保留可以恢复的最小指令集。
重写原理:对文件进行压缩(AOF文件过大时,redis会fork出一条新的进程将文件重写,遍历新进程中的内存数据)。
触发条件:Redis会记录上次重写时AOF的大小,默认配置是当AOF文件大小是上次rewrite后大小的一倍,且文件大于64M时触发,可以在配置文件中修改。
以上就是极悦小编介绍的"分布式内存数据库之Redis的持久化",希望对大家有帮助,想了解更多可查看Java分布式应用教程。极悦在线学习教程,针对没有任何Java基础的读者学习,让你从入门到精通,主要介绍了一些Java基础的核心知识,让同学们更好更方便的学习和了解Java编程,感兴趣的同学可以关注一下。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习