1、概述

Redis 是内存数据库,如果不能将内存中的数据保存到磁盘中,那么一旦服务器进程退出,服务器的数据库数据也会消失,所以Redis提供了持久化的功能,redis分为两种持久化方式:RDB和AOF。有以下几个特点:

1.RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储。

2.AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾。Redis还能对AOF文件后台重写,使得AOF文件的体积不至于过大。

3.如果你只希望你的数据在服务器运行的时候存在,你也可以不使用任何持久化的方式。

4.你也可以同时开启两种持久化方式,在这种情况下,当redis重启的时候会优先载入AOF文件来恢复原始的数据。因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整。

2、RDB

1、概念

在指定的时间间隔内将内存中的数据集快照写入磁盘中,它恢复的时候是将快照中的文件直接读取到内存中。

2、持久化机制-BGSAVE

Redis持久化深入详解

通常,会立即返回ok,Redis进程会执行fork操作创建子进程,Redis在fork时,父进程会继续为客户端提供服务,子进程会将数据持久化到硬盘上,然后退出。如果已经在后台执行保存或者正在运行另一个非后台保存的进程,特别是正在进行AOF写入时,则会返回错误。如果使用了bgsave任务,而正在进行AOF写入时,该命令将立即返回ok,并计划在下一次机会运行后台保存。阻塞只会在fork阶段。
客户端可以使用lastsave命令检查操作是否成功。

3、持久化机制-SAVE

不会接受客户端执行的操作命令,等持久化工作完成之后,会将新的文件替换旧的文件。

4、持久化机制-自动触发

redis.conf中可以配置,让用户自定义save属性,让服务器每一段时间内执行一次bgsave操作。

# 服务器在900秒内,对数据库进行了至少1次修改
save 900 1
 
# 服务器在300秒内,对数据库进行了至少10次修改
save 300 10
 
# 服务器在60秒内,对数据库进行了至少10000次修改
save 60 10000
 
# bgsave发生错误时是否停止写入,一般为yes
stop-writes-on-bgsave-error yes
 
# 持久化时是否使用LZF压缩字符串对象"htmlcode">
# 开启aof持久化方式,默认no
 appendonly no
 
# aof 持久化生成的文件名称
appendfilename "appendonly.aof"
 
# 三种持久化机制
# appendfsync always
appendfsync everysec
# appendfsync no

4、三种触发持久化机制

  • always

同步持久化,每次发生数据变更会被立即持久化到硬盘中,性能比较差,但是数据完整性好。

  • everysec

异步操作,每秒持久化数据到硬盘一次,可能会丢失一秒的数据。

  • no

从不持久化到硬盘。

5、AOF文件损坏

如果 aof 文件被破坏,redis服务是启动不了的。redis本身提供了修复了工具。redis-check-aof --fix appendonly.aof

5、优点

  • 根据配置不同的策略,让你选择持久化的方式。
  • AOF文件是一个只进行追加的日志文件,所以不需要写入seek,即使由于某些原因(磁盘空间已满,写的过程中宕机等等)未执行完整的写入命令,你也也可使用redis-check-aof工具修复这些问题。
  • Redis 可以在 AOF 文件体积变得过大时,自动地在后台对 AOF 进行重写: 重写后的新 AOF 文件包含了恢复当前数据集所需的最小命令集合。 整个重写操作是绝对安全的,因为 Redis 在创建新 AOF 文件的过程中,会继续将命令追加到现有的 AOF 文件里面,即使重写过程中发生停机,现有的 AOF 文件也不会丢失。 而一旦新 AOF 文件创建完毕,Redis 就会从旧 AOF 文件切换到新 AOF 文件,并开始对新 AOF 文件进行追加操作。
  • AOF 文件有序地保存了对数据库执行的所有写入操作,这些写入操作以 Redis 协议的格式保存, 因此 AOF 文件的内容非常容易被人读懂,对文件进行分析(parse)也很轻松。导出(export)AOF文件也非常简单:举个例子, 如果你不小心执行了 FLUSHALL 命令, 但只要 AOF 文件未被重写,那么只要停止服务器,移除 AOF 文件末尾的 FLUSHALL 命令,并重启 Redis,就可以将数据集恢复到 FLUSHALL 执行之前的状态。

6、缺点

  • 对于相同的数据集来说,AOF 文件的体积通常要大于 RDB 文件的体积。
  • 根据所使用的 fsync 策略,AOF 的速度可能会慢于 RDB 。 在一般情况下, 每秒 fsync 的性能依然非常高, 而关闭 fsync 可以让 AOF 的速度和 RDB 一样快, 即使在高负荷之下也是如此。 不过在处理巨大的写入载入时,RDB 可以提供更有保证的最大延迟时间(latency)。

4、如何选择持久化机制

开启两种持久化方式,根据自己的业务需求针对redis进行配置的调整。

标签:
redis持久化,redis特点

免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
评论“Redis持久化深入详解”
暂无“Redis持久化深入详解”评论...

稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!

昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。

这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。

而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?