Redis 高可用之"持久化"
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 高可用之"持久化"的更多相关文章
- Redis高可用(持久化、主从复制、哨兵、集群)
Redis高可用(持久化.主从复制.哨兵.集群) 目录 Redis高可用(持久化.主从复制.哨兵.集群) 一.Redis高可用 1. Redis高可用概述 2. Redis高可用策略 二.Redis持 ...
- Redis高可用详解:持久化技术及方案选择
文章摘自:https://www.cnblogs.com/kismetv/p/9137897.html 前言 在上一篇文章中,介绍了Redis的内存模型,从这篇文章开始,将依次介绍Redis高可用相关 ...
- Redis高可用详解:持久化技术及方案选择 (推荐)--转载自编程迷思博客www.cnblogs.com/kismetv/p/8654978.html
一.Redis高可用概述 在介绍Redis高可用之前,先说明一下在Redis的语境中高可用的含义. 我们知道,在web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常 ...
- Keepalived+Redis高可用部署(第二版)
更新 20150625 脚本由5个减少为4个,sh脚本指令做了精简. 修改了另外3个脚本,在日志里增加了日期显示. 新增redis数据类型,持久化,主从同步简介. 新增hiredis简介. 新增c语言 ...
- Redis 高可用集群
Redis 高可用集群 Redis 的集群主从模型是一种高可用的集群架构.本章主要内容有:高可用集群的搭建,Jedis连接集群,新增集群节点,删除集群节点,其他配置补充说明. 高可用集群搭建 集群(c ...
- 如何构建 Redis 高可用架构?
温国兵 民工哥技术之路 今天 1 .题记 Redis 是一个开源的使用 ANSI C 语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value 数据库,并提供多种语言的 API. 如今,互 ...
- Redis高可用之集群配置(六)
0.Redis目录结构 1)Redis介绍及部署在CentOS7上(一) 2)Redis指令与数据结构(二) 3)Redis客户端连接以及持久化数据(三) 4)Redis高可用之主从复制实践(四) 5 ...
- Redis高可用之哨兵模式Sentinel配置与启动(五)
0.Redis目录结构 1)Redis介绍及部署在CentOS7上(一) 2)Redis指令与数据结构(二) 3)Redis客户端连接以及持久化数据(三) 4)Redis高可用之主从复制实践(四) 5 ...
- Redis高可用之主从复制实践(四)
0.Redis目录结构 1)Redis介绍及部署在CentOS7上(一) 2)Redis指令与数据结构(二) 3)Redis客户端连接以及持久化数据(三) 4)Redis高可用之主从复制实践(四) 5 ...
随机推荐
- PageHelper实现分页查询
PageHelper是基于拦截器实现的myBatis分页插件 PageHelper的Github主页 : https://github.com/pagehelper/Mybatis-PageHelpe ...
- 一个框架看懂优化算法之异同 SGD/AdaGrad/Adam
Adam那么棒,为什么还对SGD念念不忘 (1) —— 一个框架看懂优化算法 机器学习界有一群炼丹师,他们每天的日常是: 拿来药材(数据),架起八卦炉(模型),点着六味真火(优化算法),就摇着蒲扇等着 ...
- SuperSocket AppServer 的两个事件: NewSessionConnected 和 SessionClosed
订阅事件: appServer.NewSessionConnected += new SessionHandler<AppSession>(appServer_NewSessionConn ...
- 阿里云ECS服务器活动99元一年,最高可买三年
这几天阿里云 99一年.279三年的服务器活动如火如荼,和之前腾讯三年的服务器非常类似,非常低的价格换取非常高的价值,当然,通常情况下便宜没好货的,想要玩一下的老铁可以进阿里云去看看,阿里云270三年 ...
- js随即数字random实现div点击更换背景色
需求:点击按钮随机给盒子换背景色 用到的知识点:Math.random Math.round 文章地址 https://www.cnblogs.com/sandraryan/ <!DOCT ...
- Python 3里,reduce()函数已经被从全局名字空间里移除了,它现在被放置在fucntools模块里
reduce函数:在Python 3里,reduce()函数已经被从全局名字空间里移除了,它现在被放置在fucntools模块里 用的话要 先引入:>>> from functool ...
- js 替换指定位置的字符串
不多bb,直接代码 //str:原始字符串,index,开始位置,changeStr,改变后的字 changeStr(str,index,changeStr){ return str.substr(0 ...
- JVM系统属性 OS环境变量 JVM启动参数
JVM系统属性(System Properties) 1.不支持通过文件查看和设置系统属性 2.可以通过JDK自带的工具jvisulavm.exe查看 3.可以在Java程序中使用API来查看系统属性 ...
- P1007 N钱M鸡问题
题目描述 已知公鸡 \(5\) 元钱一只,母鸡 \(3\) 元钱一只,小鸡 \(3\) 只 \(1\) 元钱. 告诉你一个整数 \(n(1 \le n \le 1000)\) ,你现在要花 \(n\) ...
- docker安装,和虚拟机区别
docker安装 1 在 CentOS 6.4 上安装 docker docker当前官方只支持Ubuntu,所以在 CentOS 安装Docker比较麻烦(Issue #172). docker官方 ...