热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Redis常规的主从方案

【RDB和AOF介绍】众所周知,Redis支持RDB和AOF两种持久化方式(据说作者将来要将两者整合),前者就是定时快照,定时dump数据到磁盘;后者则类似于MySQL的binlog,会记录

【RDB和AOF介绍】

众所周知,Redis支持RDB和AOF两种持久化方式(据说作者将来要将两者整合),前者就是定时快照,定时dump数据到磁盘;后者则类似于MySQL的binlog,会记录数据的每次变动动作。

两者并不冲突,可根据需求采用。

一般来说,常规情况下(绝大多数)都只是使用RDB;

性能至上的场景(类似memcache缓存)则可以完全关闭RDB和AOF;

对于对数据完整性要求极高的情况下(这种情况下一定要考虑好是不是非要用Redis)才会使用AOF,或两者都用。


【相关配置项介绍】

RDB时,对于快照的拍照频度,就是通过配置中的save 项进行设置,没啥好说的,视实际情况设置调整。

AOF时,也就是设置appendonly为yes,还需要设置的地方有:

appendfilename appendonly.aof 即aof文件的文件名。该文件增长的比较快,因为保存了每次写操作的过程,需要特别注意。

然后根据具体情况开启下面三个的其中一项,

# appendfsync always  每一步写操作都写入aof(最及时,影响性能最大)
# appendfsync everysec   每秒钟写入一次 (折中)
# appendfsync no  Redis自身不主动写入,由OS系统内核写入(最慢,效率最高)

再捡几个主要的配置项说下:

slave-serve-stale-data默认为yes,表示当slave连不上master(如master宕机)时,该slave仍然能够响应client的请求,提供服务;反之为no时,slave不继续响应client,而是返回error。

rdbcompression默认为yes,表示保存快照时会对数据进行压缩,好处是dump出的文件会变小,坏处额外增加CPU负担,若改为no则反之。这年头CPU一般不是瓶颈,尤其是对于存储设备来说,所以建议开启。

maxmemory  一定要设置最大内存,且建议最好留出一半以上的物理内存,供持久化操作及给slave同步数据用。


【数据恢复】

当Redis挂掉后,重启服务即可,此时它会自动从rdb或aof文件恢复数据到内存。

rdb文件中的数据更直接,体积小,恢复速度快;

aof文件记录的是log,体积庞大,恢复速度很慢。

如果两个文件都有,Redis会以哪个为准呢?

答:Redis在没有aof文件时才会使用rdb文件进行恢复。


【一种常规方案】

master关闭RDB和AOF;slave开启RDB,只读。

灾难场景:

1、当slave挂掉时,重启挂掉的slave即可,slave会自动和master同步;

2、当master挂掉时(只要slave没同时挂掉,如果怕就多搞几个slave),先停掉slave与master的同步(防止master重启后把未完全恢复的数据同步覆盖到slave),再把slave的rdb文件复制到master上(复制之前尽量执行一下bgsave命令,手动进行快照,否则一些新增数据很有可能尚未持久化),重启master,待master完全恢复后再开启slave的同步。


至于master为什么不开启rdb?性能不是主要原因,而是因为master开启rdb根本没有什么实际意义,其挂掉后最后写入的数据极大可能没有被dump,相比而言数据同步的速度一般会非常快,所以这部分数据一般会顺利地同步给slave,由slave完成dump,所以slave的rdb才是完整的。所以此方案只要能保证slave没问题,master几乎可以100%恢复数据。



推荐阅读
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 本文介绍了OkHttp3的基本使用和特性,包括支持HTTP/2、连接池、GZIP压缩、缓存等功能。同时还提到了OkHttp3的适用平台和源码阅读计划。文章还介绍了OkHttp3的请求/响应API的设计和使用方式,包括阻塞式的同步请求和带回调的异步请求。 ... [详细]
  • 单页面应用 VS 多页面应用的区别和适用场景
    本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
author-avatar
灬我的独一小姐灬
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有