Redis高可用概述

在Redis中,实现高可用的技术主要包括:持久化、复制(读写分离)、哨兵、集群。

  • 持久化:

    持久化是最简单的高可用方法(有时甚至不被归为高可用手段),主要作用是数据备份,即将数据存储在硬盘,保证数据不会因进程退出而丢失。

  • 复制:

    复制是高可用Redis的基础,哨兵和集群都是在复制的基础上实现高可用的。复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复。

    缺陷:故障恢复无法自动化,写操作无法负载均衡,存储能力受到单机的限制。

  • 哨兵:

    在复制的基础上,哨兵实现了自动化的故障恢复。

    缺陷:写操作无法负载均衡;存储能力收到单机限制。

  • 集群:

    通过集群,Redis解决了操作无法负载均衡,以及存储能力收到单机限制的问题,实现了较为完善的高可用解决方案。

Redis持久化概述

持久化的功能:Redis 是内存数据库,数据都是存储在内存中。

Redis 的持久化分为 RDB 和 AOF 持久化:

  • 前者是将数据保存到硬盘。
  • 后者是将每次执行的写命令保存到硬盘。
RDB 持久化

​ RDB持久化是将当前进程中的数据生成快照保存到硬盘中(因此也叫做快照持久化),保存的文件后缀是RDB;

​ 当Redis重新启动时,可以读取快照文件恢复数据。

触发条件

  • 手动触发
  • 自动触发

手动触发:save命令和bgsave命令都可以生成 RDB 文件。

​ save命令会阻塞 Redis 服务进程,直到 RDB 文件创建完毕为止,在 Redis 服务器 阻塞期间,服务器不能执行任 何命令请求。

​ bgsave命令会创建一个子进程,由子进程来创建 RDB 文件,父进程(即 Redis 主进程) 继续处理请求。bgsave 命令执行过程中,只有fork(ork了进程,子进程中的redis连接没法用了,要重连) 子进程会阻塞服务器,而对于 save 命令,整个过程都会阻塞服务器。

在自动触发 RDB 持久化时,Redis 也会使用 bgsave 而不是 save 来进行持久化;下面介绍自动触发 RDB 持久化条件。

自动触发:最常见的情况是在配置文件中通过 save m n ,指定 m 秒内发生了 n 次变化时,会触发 bgsave。

​ 在Redis 配置文件Redis.conf中,可以看到如下配置信息:

save 900 1	#当时间到 900 秒时,如果 Redis 数据发生了至少 1 次变化,则执行 bgsave。
save 300 10
save 60 10000

除了 save m n 以外,还有一些其他情况会触发 bgsave:

  • 在主从复制场景下,如果从节点执行全量复制操作,则主节点会执行 bgsave 命令,并将 RDB 文件发送给从节点。
  • 执行 shutdown 命令时,也会自动执行 RDB 持久化。

启动时加载

​ RDB 的载入工作实在服务器启动时自动执行的,并没有专门的命令。但是由于 AOF 的优先级更高,因此当 AOF 开启时,会优先载入 AOF 文件来恢复数据。

文件校验

​ Redis 载入 RDB 文件时,会对 RDB 文件进行校验,如果文件损坏,则日志中会打印错误,Redis 启动失败。

AOF 持久化

​ RDB 持久化是将进程数据写入硬盘,而 AOF 持久化(即 Append Only File 持久化),则是将 Redis 执行的每次写 命令记录到单独的日志文件中,当 Redis 重启的时候再次执行 AOF 来恢复数据。

与 RDB 相比 ,AOF 实时性更好,因此已成为当前主流的持久化方案。

开启 AOF:Redis 服务器默认开启 RDB,关闭 AOF;要开启 AOF,需要在配置文件中配置:appendonly yes。

文件校验

​ 与载入 RDB 文件类似,Redis 载入 AOF 文件时,会对 AOF 文件进行校验,如果文件损坏,则日志中会打印错 误,Redis 启动失败。

RDB与AOF的优缺点

RDB 持久化:

  • 优点:RDB 文件紧凑,体积小,网络传输快,适合全量复制;恢复速度比 AOF 快很多。当然,与 AOF 相比,RDB 最重要的优点之一是对性能的影响相对较小。

  • 缺点:RDB 文件的致命缺点在于其数据快照的持久化方式决定了必然做不到实时持久化,而在数据越来越重要的今天,数据的大量丢失很多时候是无法接受的,因此 AOF 持久化成为主流。

    此外,RDB 需要满足特定的格式,兼容性差/

AOF 持久化:

  • 与 RDB 持久化相对应,AOF 的优点在于支持秒级持久化、兼容性好,缺点是文件大、恢复速度慢、对性能影响大。

Redis 高可用之"持久化"的更多相关文章

  1. Redis高可用(持久化、主从复制、哨兵、集群)

    Redis高可用(持久化.主从复制.哨兵.集群) 目录 Redis高可用(持久化.主从复制.哨兵.集群) 一.Redis高可用 1. Redis高可用概述 2. Redis高可用策略 二.Redis持 ...

  2. Redis高可用详解:持久化技术及方案选择

    文章摘自:https://www.cnblogs.com/kismetv/p/9137897.html 前言 在上一篇文章中,介绍了Redis的内存模型,从这篇文章开始,将依次介绍Redis高可用相关 ...

  3. Redis高可用详解:持久化技术及方案选择 (推荐)--转载自编程迷思博客www.cnblogs.com/kismetv/p/8654978.html

    一.Redis高可用概述 在介绍Redis高可用之前,先说明一下在Redis的语境中高可用的含义. 我们知道,在web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常 ...

  4. Keepalived+Redis高可用部署(第二版)

    更新 20150625 脚本由5个减少为4个,sh脚本指令做了精简. 修改了另外3个脚本,在日志里增加了日期显示. 新增redis数据类型,持久化,主从同步简介. 新增hiredis简介. 新增c语言 ...

  5. Redis 高可用集群

    Redis 高可用集群 Redis 的集群主从模型是一种高可用的集群架构.本章主要内容有:高可用集群的搭建,Jedis连接集群,新增集群节点,删除集群节点,其他配置补充说明. 高可用集群搭建 集群(c ...

  6. 如何构建 Redis 高可用架构?

    温国兵 民工哥技术之路 今天 1 .题记 Redis 是一个开源的使用 ANSI C 语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value 数据库,并提供多种语言的 API. 如今,互 ...

  7. Redis高可用之集群配置(六)

    0.Redis目录结构 1)Redis介绍及部署在CentOS7上(一) 2)Redis指令与数据结构(二) 3)Redis客户端连接以及持久化数据(三) 4)Redis高可用之主从复制实践(四) 5 ...

  8. Redis高可用之哨兵模式Sentinel配置与启动(五)

    0.Redis目录结构 1)Redis介绍及部署在CentOS7上(一) 2)Redis指令与数据结构(二) 3)Redis客户端连接以及持久化数据(三) 4)Redis高可用之主从复制实践(四) 5 ...

  9. Redis高可用之主从复制实践(四)

    0.Redis目录结构 1)Redis介绍及部署在CentOS7上(一) 2)Redis指令与数据结构(二) 3)Redis客户端连接以及持久化数据(三) 4)Redis高可用之主从复制实践(四) 5 ...

随机推荐

  1. javascript 元素的大小

    1.偏移量 元素的可见大小由其高度.宽度决定,包括所有内边距.滚动条和边框大小(不包含外边距).通过下列4个属性可以获取元素的偏移量: offsetHeight: offsetWidth: offse ...

  2. js读取cookie 根据cookie名称获取值、赋值

    借鉴:原作者https://blog.csdn.net/zouxuhang/article/details/80548417   //方法1   //存在问题:如果cookie中存在 aaaname= ...

  3. Python--day23--组合

  4. pytorch实现BiLSTM+CRF用于NER(命名实体识别)

    pytorch实现BiLSTM+CRF用于NER(命名实体识别)在写这篇博客之前,我看了网上关于pytorch,BiLstm+CRF的实现,都是一个版本(对pytorch教程的翻译), 翻译得一点质量 ...

  5. word 筛选过的网页,网页,单个文件网页

    1)筛选过的网页:保存后会生成 xxx.htm和xxx.files文件夹,删除了还原成Word文档所需的格式标记和功能,也就是说存为纯网页了,文件尺寸小:2)网页:保存后会生成 xxx.htm和xxx ...

  6. P1094 百钱白鸡

    题目描述 公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱,用100文钱买100只鸡,其中公鸡,母鸡,小鸡都必须要有,问公鸡,母鸡,小鸡要买多少只刚好凑足100文钱. 输入格式 无. 输出格式 输出所有 ...

  7. Vue 子组件传父组件

    vue中的传值是个很烦的问题,记录一下自己完成的这个需求. 首先,被引用的称之为子组件,当前页面为父组件,这个不能搞错. 子组件传值,要用到this.$emit. 子组件页面,需要在一个函数中使用th ...

  8. P1061 最长连号

    题目描述 输入n个正整数,(1<=n<=10000),要求输出最长的连号的长度.(连号指从小到大连续自然数) 输入格式 第一行,一个数n; 第二行,n个正整数,之间用空格隔开. 输出格式 ...

  9. H3C 根据主机地址数划分子网

  10. tensorflow在文本处理中的使用——CBOW词嵌入模型

    代码来源于:tensorflow机器学习实战指南(曾益强 译,2017年9月)——第七章:自然语言处理 代码地址:https://github.com/nfmcclure/tensorflow-coo ...