第十六章《持久化》

第十六章《持久化》

redis 持久化
RDB:快照的形式实现的持久化
AOF:日志的形式实现的持久化

1.RDB:默认的持久化方式,把某一时刻redis内存中的数据以二进制文件的形式保存到磁盘中
触发机制:
【手动】:save、bgsave
save:阻塞当前的redis服务,将数据dump到零时的dump.rdb这个文件,然后再把dump.rdb文件保存到磁盘中(线上不建议使用,阻塞redis服务)
bgsave:fork出一个子进程,由子进程完成持久化,只有fork子进程这个过程阻塞;
在执行debug load重载或者是shutdown关闭redis服务,默认都会执行bgsave;
【自动】:通过配置文件来配置

save 900 1 //900秒内进行一次数据操作更新就会触发
save 300 10 //300秒内进行10次数据更新更新就会触发
save 60 10000 //60秒内进行10000次数据更新就会触发

RDB持久化的优缺点;
优点:
(1)rdb是一个紧凑压缩的二进制文件,代表redis在某一个时间点上的数据快照,非常适用于全量备份的场景。(2)redis加载rdb文件来会数据要快AOF的方式
缺点:
(1)RDB持久化方式没法做到实时持久化/秒级持久化,因为每次bgsave每次都会fork子进程,属于重量级操作,频繁执行会消耗redis性能,阻塞redis服务;
(2)rdb文件使用特定二进制格式保存,redis不同版本兼容的二进制格式不同
(3)如果在save的过程当中redis宕机,没有被持久化到磁盘的这部分数据会丢失,为了解决这个问题,redis提供了AOF持久化方式。

AOF(append only file):以独立日志的方式记录每次写命令,重启时在重新执行AOF日志中记录的写命令,达到恢复数据的目的,AOF就是用来解决数据的实时持久化;
appendonly yes //开启AOF持久化
appendfilename “appendonly.aof” //默认的aof文件名
AOF的同步策略
appendfsync always //redis每写入一条数据就会调用fsync同步到磁盘的aof文件;
appendfsync everysec //每隔一秒钟同步一次
appendfsync no //不进行同步;默认每隔30s进行一次同步

AOFrewrite:随着写入aof文件的内容越来越多,aof文件变得更大
(1)进程中已经超时的数据不在写入文件
(2)旧的aof文件中包含了无效命令,比如del key1、hdel key2 、srem keys、set 111 、set 222、set 333这些命令

【手动】bgrewrite 触发重写aof文件
【自动】
auto-aof-rewrite-percentage 100 //当aof文件里面的内容超过了预设定值的100%
auto-aof-rewrite-min-size 64mb //触发重写的aof文件量不少于64M

aof持久化流程
(1)所有写入命令追加到aof_buf(缓冲区)中;
(2)aof缓冲区根据对应策略向硬盘做同步操作
(3)随着aof文件越来越大,需要定期对aof文件进行重写,达到压缩目的

小知识:
(1)在aof文件没有进行重写之前我们可以通过编辑appendonly.aof文件来取消误操作
(2)redis重启时会优先加载aof文件进行数据恢复,因为aof文件数据比较完整。

持久化常见问题和优化;
1.fork操作:
当redis进行rdb和aof重写时,都必须要fork子进程,对于操作系统来说fork属于一个重量级操作
在fork的过程中会阻塞,特别是我们使用的时虚拟化技术尤其是Xen虚拟机,fork会更耗时
优化;
(1)优先使用物理机或者高效支持fork操作的虚拟化技术;
(2)控制redis实例最大可用内存,fork耗时和内存量成正比,线上建议每隔redis内存控制在10G以内
2.子进程开销和优化:
(1)cpu:子进程负责把进程内的数据分批写入文件,cpu密集操作,子进程对单核cpu利用率接近90%
优化:尽量redis服务多分配cpu核心数,不要和其他cpu密集型应用或服务部署到同一台服务器;
(2)内存:子进程理论上也会占用和父进程一样的内存,所以对内存的消耗也很大
优化:内存存储的数据量不要太大,不要和其他内存使用量大的服务器部署在同一台服务器;
(3)硬盘:子进程主要用于将内存中的数据同步到硬盘中,因此在持久化的过程中对硬盘的I/O性能开销大。aof文件的重写也会消耗大量的硬盘IO;
优化:(1)不要和其他高硬盘负载的服务部署在一起
(2)对于多个redis实例部署在一台机器上这种情况,我们可以通过设置不同数据保存路径来分摊硬盘的写入压力
(3)AOF重写消耗大量硬盘IO,可以开启no-appendfsync-on-rewrite yes 标识在重写期间不进行sync操作

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101962.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 哈佛幸福课–部分笔记

    哈佛幸福课–部分笔记(仅供参考)灵性超越对宇宙的更高目的和意义有一致的信念,知道自己在大计划中的位置,对生活的意义有信念,能塑造行为并提供安慰。2.公平正义3.诚实勇气4.善良人类5.判断

    2022年7月1日
    20
  • 此工作站和主域直接信任失败_此域与工作站信任失效

    此工作站和主域直接信任失败_此域与工作站信任失效当您登录到域环境中运行Windows7的计算机上时,您会收到以下错误消息:此工作站和主域之间的信任关系失败。解决方案若要解决此问题,请从域中删除计算机,然后将计算机连接到域。若要执行此操作,请执行以下步骤:使用本地管理员帐户登录到计算机上。单击开始,右键单击计算机,然后单击属性。单击计算机名称旁边的更改设置。在计算机名选项卡上,单击更改。在

    2022年10月18日
    0
  • C#实现登录界面,密码星号显示(隐藏输入密码)

    C#实现登录界面,密码星号显示(隐藏输入密码)C#实现登录界面,密码星号显示(隐藏输入密码)属性解释代码效果工程在软件设计时,往往需要设置用户的登录权限。用户在填写密码时,如何实现输入隐藏,或者以“*”号进行隐藏显示?这里需要利用textBox的PasswordChar属性。属性解释PasswordChar属性用于获取或设置字符,该字符用于屏蔽单行TextBox控件中的密码字符。代码下面展示了checkBox状态切换响应函数代码privatevoidckBoxPassword_CheckedChanged(objectsend

    2022年7月24日
    73
  • Windows键失灵的三种处理方式「建议收藏」

    Windows键失灵的三种处理方式「建议收藏」对于经常使用电脑学习或者工作的我们来说,特别是搞编程的小伙伴们。Windows键的失灵将会导致我们的工作效率大大降低,比如:Win+E快速打开我的电脑;Win+R快速打开命令行等,许多组合键都不能使用,好烦躁。不要急,先看看这篇文章,可能有惊喜哦!

    2022年5月4日
    100
  • 反Secure Boot垄断:兼谈如何在Windows 8电脑上安装Linux

    反Secure Boot垄断:兼谈如何在Windows 8电脑上安装Linux

    2021年9月15日
    40
  • 利用MDK软件生成bin文件的简单方法

    利用MDK软件生成bin文件的简单方法一、缘由:之前学习KeilMDK-ARM软件,找了好久生成bin文件的方法,这次分享最简单的,所以写了此篇博文二、操作步骤:1、打开“KeilMDK-ARM软件”-找到魔术棒“Optionsfortarget…”:2、点击“User”选择AfterBulid/Rebuild状态下的“▢Run#1”:3、点击后面的空白处,写入命令,,最后关闭窗口,重新编译软件,即可生成bin文件:4、具体命令如下:命令格式1:fromelf.exe–bin-o“%L@L.

    2022年10月20日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号