redis介绍(3)RDB和AOF原理解析
简单科普一下redis的概念:(会的可忽略)
- Redis的概念
redis基于内存的Key Value类型的NoSQL数据库.
- Redis的特点
1. Redis是一个高性能的Key/Value数据库 2. 基于内存 3. 数据类型丰富 4. 持久化 5. 订阅/发布模型 - Redis与Memcache区别
Redis是一个内存型数据库产品,而Memcache是一个内存型缓存产品,Redis可 以对内存中的数据进行持久化,而Memcache不行
下面来搞一下redis的持久化的一些知识
补充:
Redis中数据存储模式有2种:cache-only,persistence
- cache-only即只做为“缓存”服务,不持久数据,数据在服务终止后将消失,此模式下也将不存在“数据恢复”的手段,是一种安全性低/效率高/容易扩展的方式;
- persistence即为内存中的数据持久备份到磁盘文件,在服务重启后可以恢复,此模式下数据相对安全。
对于persistence持久化存储,Redis提供了两种持久化方法
- Redis DataBase(简称RDB)
- Append-only file (简称AOF)
注意:除了这两种方法,Redis在早起的版本还存在虚拟内存的方法,现在已经被废弃。
redis的持久化方案有两种,下面详细讲一下:
redis持久化方式分为两种:RDB快照和AOF方式(默认为RDB模式),当Redis服务器重启的时候,会自动恢复数据,优先从AOF中恢复,其次才从RDB中恢复
RDB原理:
RDB:快照方式,允许你每隔一段时间对内存数据做一次快照然后存储到硬盘中。该方式是Redis默认的持久化方式。
优点:使用单独子进程来进行持久化,主进程不会进行任何IO操作,保证了redis的高性能
缺点:RDB是间隔一段时间进行持久化,如果持久化之间redis发生故障,会发生数据丢失。所以这种方式更适合数据要求不严谨的时候
RDB可以通过在配置文件中配置时间或者改动键的个数来定义快照条件,编辑配置文件redis.conf,找到
save 900 1 #15分钟之内至少有一个建被更改则进行快照
save 300 10 #5分钟之内至少有10个建被更改则进行快照
save 60 10000 #1分钟之内至少有1000个建被更改则进行快照
他们之间是或的关系,RDB持久化到磁盘的文件默认路径是在当前目录,文件名为dump.rdb,你可以通过配置文件配置dir和dbfilename来指定文件目录和文件名称,RDB文件还可以进行压缩,你可以通过配置rdbcompression参数来进行压缩。

RDB机制的完成流程
1 redis的主进程 fork子进程 完成RDB写操作
2 redis的主进程对提供服务,子进程会把当前数据库中的数据,写入临时文件
3 当临时文件写好之后,覆盖原有的RDB快照文件
AOF原理(增量式复制 日志式复制):
AOF方式原理:AOF就可以做到全程持久化,Redis每执行一个修改数据的命令,都会把这个命令添加到AOF文件中,当Redis重启时,将会读取AOF文件进行“重放”以恢复到 Redis关闭前的最后时刻。
注意: 默认redis会使用RDB的方式进行持久化.redis中即使用RDB 又使用AOF ,redis会应用AOF
AOF运行机制

AOF比RDB更加安全,记录每一次的写操作.但是如果在写的过程中掉电,也会丢失少量数据
AOF:通过将发送到服务器的写操作命令记录下来,形成AOF文件,文件默认名称是appendonly.aof,可以通过appendfilename来指定文件名称。你可以通过配置文件打开AOF功能
appendonly yes
AOF的原理是直接把用户插入到服务器的命令追加到结尾,那么文件会原来越大,一些重复的写命令也会越来越多,这时,我们可以利用BGREWRITEAOF 命令来重写AOF,重写的配置如下:
auto-aof-rewrite-percentage 100 #aof文件大小超过上次重写时文件大小的百分之几开始重写,如果之前没有写过,则根据启动时文件大小。
auto-aof-rewrite-min-size 64mb #限制允许重写时的最小文件大小。
AOF在同步内存数据到磁盘上时,并不是马上把文件写如到磁盘中,而是先把文件缓存到系统,然后每隔30秒将文件写入到磁盘中,我们可以在配置文件中配置同步的策略
appendfsync always #每次都同步,保证数据不会丢失,但会慢
appendfsync everysec #每秒同步,系统默认同步策略
appendfsync no #不主动同步,由操作系统决定,快,但数据容易丢失
注意:
Redis持久化的问题:
假定初始Redis使用RDB进行持久化 , 切换AOF进行持久化.问题?
RDB --- bgsave ---- dump.rdb
AOP --- appendonly.aof 获取数据
热切换:
改变redis.conf文件 appendonly yes
redis介绍(3)RDB和AOF原理解析的更多相关文章
- Redis 持久化之RDB和AOF
Redis 持久化之RDB和AOF Redis 有两种持久化方案,RDB (Redis DataBase)和 AOF (Append Only File).如果你想快速了解和使用RDB和AOF,可以直 ...
- 详解Redis持久化(RDB和AOF)
详解Redis持久化(RDB和AOF) 什么是Redis持久化? Redis读写速度快.性能优越是因为它将所有数据存在了内存中,然而,当Redis进程退出或重启后,所有数据就会丢失.所以我们希望Red ...
- redis持久化(RDB、AOF、混合持久化)
redis持久化(RDB.AOF.混合持久化) 1. RDB快照(snapshot) 在默认情况下, Redis 将内存数据库快照保存在名字为 dump.rdb 的二进制文件中. 你可以对 Redis ...
- Redis的持久化——RDB和AOF
推荐阅读 Redis 持久化之RDB和AOF --来自ITDragon龙 Redis Persistence --来自Redis官网文档
- Redis持久化之RDB与AOF
1. Redis的持久化方式 Redis作为高效的缓存件,它的数据存放在内存中,如果没有配置持久化,那么数据会在重启后丢失,因此如果不是仅用Redis做缓存的话,需要开启Redis的持久化功能,将数据 ...
- Redis 持久化之RDB和AOF详解
一.RDB 详解 RDB 是 Redis 默认的持久化方案.在指定的时间间隔内,执行指定次数的写操作,则会将内存中的数据写入到磁盘中.即在指定目录下生成一个dump.rdb文件.Redis 重启会通过 ...
- 【Redis】Redis 持久化之 RDB 与 AOF 详解
一.Redis 持久化 我们知道Redis的数据是全部存储在内存中的,如果机器突然GG,那么数据就会全部丢失,因此需要有持久化机制来保证数据不会一位宕机而丢失.Redis 为我们提供了两种持久化方案, ...
- [转载]Redis 持久化之RDB和AOF
原文链接:https://www.cnblogs.com/itdragon/p/7906481.html 温馨提示 在正式数据(当然是非生产环境啦)练习以下操作时,一定一定一定记得备份dump.rdb ...
- redis持久存储RDB和AOF的区别及优缺点
1.前言 最近在项目中使用到Redis做缓存,方便多个业务进程之间共享数据.由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能, ...
随机推荐
- 2018春招-今日头条笔试题-第四题(python)
题目描述:2018春招-今日头条笔试题5题(后附大佬答案-c++版) #-*- coding:utf-8 -*- class Magic: ''' a:用于存储数组a b:用于存储数组b num:用于 ...
- java 中break 和continue 的非常规用法
正常情况下,break只能断掉最近的循环.(比如二个嵌套的for循环中 ,第二个循环的break.不会中断第一个for循环) 问题是: 嵌套中 如果要断掉任意其中的循环怎么做? 答案是: 加一个lab ...
- Eclipse-离线安装Memory Anlysis Tool
Eclipse版本:Version: Mars.2 Release (4.5.2) 1.从官网下载MAT Memory Anlysis Tool http://www.eclipse.org/mat/ ...
- jenkins自动部署tomcat
关于部署的3种思路: 远程部署(jenkins编译部署到远程服务器): 安装ssh插件 ssh插件配置 添加远程jenkins服务器节点: 本地部署(与jenkins在同一服务器): 关于maven构 ...
- SpringMVC和dubbo简单的整合(附Demo)
顺便记录下apache产品提供下载的网址:http://mirrors.shuosc.org/apache/ 第一步: 下载zookeeper,网址:http://mirrors.shuosc.org ...
- Go语言学习笔记十二: 范围(Range)
Go语言学习笔记十二: 范围(Range) rang这个关键字主要用来遍历数组,切片,通道或Map.在数组和切片中返回索引值,在Map中返回key. 这个特别像python的方式.不过写法上比较怪异使 ...
- LDA理解
LDA只是一个求解思路. 1.理解LDA首先要理解EM算法,EM不能叫做一个算法,只是一个思想:它要求解的其实是一个极大似然估计,就是我用已知量去求解导致这个已知量出现的最大概率,而在这里又恰恰有点偏 ...
- WPF样式动画Trigger.EnterActions和Trigger.ExitActions(ExitActions其实可以不做任何事情)
这是一个鼠标移入后,控件往左移动的动画: <Style TargetType="{x:Type StackPanel}"> <Setter Property=&q ...
- php的一个验证邮箱的正则表达式
/([a-z0-9]*[-_\.]*[a-z0-9]+)*[-_\.]*@([a-z0-9]*[-_]?[a-z0-9]+)+[\.]([a-z0-9]{2,3}|[a-z0-9]*[-_]?[a-z ...
- 利用Google翻译成多国语言的见解
1.首先注意,英语句子中的 第一个单词的首字母要大写, 2.句子结尾了,要用句号. 3.英语中单词和前面的标点符号要留一个空格,如: you.Are 应该是 you. Are you..... ...