欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Redis 持久化介绍

程序员文章站 2022-05-22 20:34:22
...

持久化介绍

Redis 的数据都存放在内存中,如果没有配置持久化,redis 重启后数据就全丢失,于是需要开启 redis 的持久化功能,将数据保存到磁盘上,当 redis 重启后,可以从磁盘中恢复数据。

                         Redis 持久化介绍

Redis持久化方式:

  1. RDB持久化:方式能够在指定的时间间隔对你的数据进行快照存储。
  2. AOF持久化方式:记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据。

RDB方式:

客户端直接通过命令BGSAVE或者SAVE来创建一个内存快照

  •     BGSAVE调用fork来创建一个子进程,子进程负责将快照写入磁盘,而父进程仍然继续处理命令。
  •     SAVE执行SAVE命令过程中,不再响应其他命令(会阻塞其他命令)。
    在redis.conf中调整save配置选项,当在规定的时间内,Redis发生了写操作的个数满足条件会出发发生BGSAVE命令:
#900秒之内至少一次写操作
save 900 1
#300秒之内至少发生10次写操作
save 300 10
#60秒之内发生至少10000次
save 60 10000

RDB 优点和缺点:

优点:对性能影响最小(以异步的形式保存信息)、RDB文件进行数据恢复比使用AOF要快很多。

缺点:同步时丢失数据(因为根据时间间隔和发生写操作的次数保存)、如果数据集非常大且CPU不够强(比如单核CPU),Redis在fork子进程时可能会消耗相对较长的时间,影响Redis对外提供服务的能力。

 

AOF 持久化方式:

开启AOF持久化,redis.conf中调整,默认是不开启的。

appendonly yes

#AOF策略调整
#每次有数据修改发生时都会写入AOF文件
appendfsync always

#每秒钟同步一次,该策略为AOF的缺省策略
appendfsyn everysec

#从不同步。高效但是数据不会被AOF持久化
appendfsync no

 

AOF 优点和缺点:

优点:最安全、容灾处理安全、易读,可修改

缺点:文件体积大(每次命令处理都保存)、性能消耗比RDB高(执行频次高)、数据回复速度比RDB慢

 

模拟RBD持久化快照保存:

在redis.conf中修改RDB快照的间隔时间和次数,这里修改的是3秒有2次操作就会保存一次快照,实际是redis每隔3秒就会去检查操作次数,如果大于2则会操作一次BGSAVE。

Redis 持久化介绍

 

3秒内快速操作Redis

Redis 持久化介绍

 

日志打印,BGSAVE调用fork来创建一个子进程子进程负责将快照写入磁盘,这里显示子进程号:16310

Redis 持久化介绍

 

RDB快照保存缺点演示:

操作一次Redis,这里显示b已经被保存

Redis 持久化介绍

 操作一次Redis服务挂掉,然后重启服务:

                 Redis 持久化介绍

 

重新获取b,数据丢失,因为RDB是根据时间间隔和发生写操作的次数保存,这里的b还没有保存就被kill掉了,重启后redis重新加载RDB文件,里面没有b的保存数据。

                   Redis 持久化介绍

如果Redis是正常关闭,不是被kill掉,则会在退出的时候进行一次RDB快照保存。 

 

模拟AOF持久化保存:

在redis.conf中打开aof持久化保存配置,配置每秒同步一次数据到aof文件。

Redis 持久化介绍

执行操作:

Redis 持久化介绍

 

打开保存数据持久化的文件aof,这里的数据我们是可以看明白的,并且可以去修改他,kill -9 掉程序,重启之后仍然可以获取到值

              Redis 持久化介绍