前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis--Redis持久化方式

Redis--Redis持久化方式

原创
作者头像
Java学术趴
发布2022-10-06 15:35:11
3670
发布2022-10-06 15:35:11
举报
文章被收录于专栏:Java全栈·Java全栈·

👨‍🎓作者:Java学术趴 🏦仓库:GithubGitee ✏️博客:CSDN掘金InfoQ云+社区 💌公众号:Java学术趴 🚫特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系小编授权。 🙏版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。微信搜索公众号Java学术趴联系小编。

☠️每日毒鸡汤:一件事你犹豫去不去做,那就是该立即动身做的。

1. Redis持久化

  • Redis中的数据一般存储在内存中,也可以使用持久化的方式将数据写到硬盘中。
  • Redis提供了两种持久化数据的方式:RDB以及AOF。
  • 如果使用 Redis 只是作为缓存使用,那么可完全不用持久化操作。

1.1 RDB

1.1.1 RDB介绍
  • RDB(Redis DataBase) : 在指定的 时间间隔 内将内存中的数据集快照写入到磁盘中,它恢复的时候将快照文件直接读取到内存里。
  • RDB默认是开启的。
1.1.2 备份是如何执行的
  • Redis会单独创建(fork),一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能。
  • 如果需要进行大规模数据的恢复,且对于数据恢复是完整性不是非常的敏感,那RDB方式要比AOF方式更加的高效。
  • RDB的缺点是最后一次持久化的数据可能丢失。因为可能存储一半数据的时候,Redis服务器挂掉了,这就会导致数据丢失。
1.1.3 Fork
  • Fork的作用是复制一个与当前进程一样的进程。新进程的所有数据(变量、环境变量、程序计数器、数值)都和原来保持一致,但是是一个全新的进程,并作为原进程的子进程。
  • 在 Linux程序中,fork() 会产生一个和父进程完成相同的子进程,但子进程在此后多会 exec 系统调用,出于效率考虑,linux中引入 写时复制技术
  • 一般情况下父进程和子进程共用同一段物理内存,只有进程空间的各段内容要发生变化时,才会将父进程的内容复制一份给子进程。
1.1.4 RDB优势
  • 适合大规模的数据恢复。
  • 对数据完整性和一致性要求不高适合使用。
  • 节省磁盘空间。
  • 恢复速度快。
1.1.5 RDB劣势
  • Fork的时候,内存中的数据被克隆一份,大致2倍的膨胀性需要考虑。
  • 虽然Redis在fork的时候使用写时拷贝技术,但是如果数据庞大的时候还是比较消耗性能。
  • 在备份周期在一定间隔时间做一个备份,所有如果Redis在备份的时候发生意外 down 的话,就会丢失最后一次快照后的所有修改。

1.2 AOF

1.2.1 AOF简介
  • AOF(Append Only File) : 以日志的形式来记录每个写操作(增量保存) ,将Redis执行过的所有写指令记录下来( 读操作不记录 ), 只允许追加文件但不可以改写文件,Redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将指令从前到后执行一次以完成数据的恢复工作。
  • 写操作:增、删、改,会涉及到修改数据的操作。读操作:就是查询,不涉及到数据的修改。
1.2.2 AOF持久化流程
  1. 客户端的请求写命令会被 append 追加到 AOF 缓存区内。
  2. AOF缓冲区根据AOF持久化策略【always,everysec,no】将操作sync同步到磁盘的AOF文件中。
  3. AOF文件大小超过重写策略或手动重写时,会对AOF文件rewrite重写,压缩AOF文件容量。
  4. Redis服务重启时,会重新 load 加载 AOF 文件中的写操作达到数据恢复的目的。
1.2.3 AOF默认不开启
  • 在 Redis.conf 配置文件中,将 appendonly 属性设置为 yes。
  • 可以在 redis.conf 中配置文件名称,默认为 append.aof
  • AOF文件保存的路径,同 RDB 的路径一致。
1.2.4 AOF和RDB同时开启,redis听谁的??
  • AOF和RDB同时开启,系统默认会读取AOF的数据(AOF中的数据不会丢失)
1.2.5 AOF同步频率设置
  • appendfsync always : 始终同步,每次Redis的写入都会立刻记入日志,性能较差但数据完整性比较好。
  • appendfsync everysec : 每秒同步,每秒记入日志一次,如果宕机,本秒的数据会丢失。
  • appendfsync no : redis不主动进行同步,把同步时机交给系统。
1.2.6 Rewrite压缩

把复杂的命令进行简化

  • AOF采用文件追加方式,文件会越来越大为了避免出现此种情况,新增了重写机制,当AOF文件的大小超过所设定的阈值时,Redis就会启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集,可以使用命令 bgrewriteaof
1.2.7 AOF优势
  • 备份机制更稳健,丢失数据概率更低。
  • 可读日志文本,通过操作AOF稳健,可以处理误操作。
1.2.8 AOF劣势
  • 比 RDB 占用更多的磁盘空间。
  • 恢复备份速度要慢。
  • 每次读写都同步的话,有一定的性能压力。
  • 存在个别的 bug,造成不能恢复,需要进行修复。

总结:RDB以快照的形式持久化,AOF以日志追加的方式持久化。

2. Redis主从复制

2.1 主从复制介绍

2.1.1 介绍
  • 主机数据更新侯根据配置和策略,自动同步到备机的 master/slaver 机制
  • Master以写为主,slave以读为主。
  • 相当于把数据多存储到几台机器上,主服务器主要负责写,写完之后把数据复制到从服务器中(可以有多个从服务器),当读取数据的时候不从主服务器中读取,而是在从数据库中读取,这样就减少了服务器读写的压力。
  • 只有一台主服务器,多台从服务器。 一主多从
  • 当绑定主从关系之后,主服务器可以进行读写操作。但是从服务器只能做读操作,写操作会报错。
2.1.2 主动复制的优势
  • 读写分离,性能扩展。
  • 容灾快速恢复。
2.1.3 主从复制的原理
  1. 当从服务器链接上主服务器之后,从服务器向主服务器发送进行同步数据的消息。 ( 从服务器自主发起 )
  2. 主服务器接到从服务器发送过来同步消息,把主服务器数据进行持久化,保存到 rdb文件中,把 rdb文件发送给从服务器,从服务器拿到rdb进行读取保存数据。 全量复制
  3. 每次主服务器进行写操作之后,向从服务器发送数据同步的请求。( 主服务器自主发起 )(增量复制

2.2 主从挂机的情况

2.2.1 一主二仆

从服务器挂点,主服务器还在

  • 从服务器挂掉之后,从新启动之后将不再是一个从服务器,会变为一个主服务器,需要从新绑定主从关系。
  • 当绑定到主服务器之后他会把主服务中的数据自动复制一个保存到自己本地。

主服务器挂掉,从服务器还在

  • 从服务器还是从服务器,不会变为住服务器,在从服务器中可以看到它绑定的主服务器已经挂掉了。
  • 当主服务器重启之后,还是该从服务器的主服务器。
2.2.2 薪火相传
  • 上一个 Slave 可以作为下一个 slave 的 Master ,Slave同样可以接收其他 slave 的链接和同步请求,那么该 slave 作为了下一个链条中的 master,可以有效减轻 master 的写压力,去中心化降低风险。
  • 这个特点和一主二仆是一样的。
2.2.3 反客为主
  • 当一个 matser 宕机后,后面的 slave 可以立刻升级为 master,其后面的 slave 不用做任何的修改。
  • 这个 反客为主 的方式需要手动操作。

2.3 哨兵模式

  • 反客为主的自动版, 能够在后台监控主机是否有故障,如果发生了故障根据投票数自动将从服务器转换为主服务器。

这个1代表有多少个哨兵同意才可以迁移为主服务器。

在选在完从服务器作为主机之后,以前的主机重启之后会变为新主服务器的从服务器。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. Redis持久化
    • 1.1 RDB
      • 1.1.1 RDB介绍
      • 1.1.2 备份是如何执行的
      • 1.1.3 Fork
      • 1.1.4 RDB优势
      • 1.1.5 RDB劣势
    • 1.2 AOF
      • 1.2.1 AOF简介
      • 1.2.2 AOF持久化流程
      • 1.2.3 AOF默认不开启
      • 1.2.4 AOF和RDB同时开启,redis听谁的??
      • 1.2.5 AOF同步频率设置
      • 1.2.6 Rewrite压缩
      • 1.2.7 AOF优势
      • 1.2.8 AOF劣势
  • 2. Redis主从复制
    • 2.1 主从复制介绍
      • 2.1.1 介绍
      • 2.1.2 主动复制的优势
      • 2.1.3 主从复制的原理
    • 2.2 主从挂机的情况
      • 2.2.1 一主二仆
      • 2.2.2 薪火相传
      • 2.2.3 反客为主
    • 2.3 哨兵模式
    相关产品与服务
    云数据库 Redis
    腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档