redis的持久化 rdb和aof
1、rdb(Redis DataBase)

当满足条件时,redis单独会fork(创建)一个新的线程,会先将内存中的数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次已经持久化好了的文件,整个过程中,主进程是不进行任何IO操作的,确保了极高的性能,此时的主进程还可以进行读写操作。rdb数据持久化的缺点是最后一次持久化的数据可能丢失,当在最后一次持久化的时间截点内还没有持久化,此时机器宕机了或出故障了,那么最后一次的数据就没有持久化到。
Fork:fork的作用是复制一个与当前进程一样的进程,新进程的所有数据(变量、环境变量、程序计数器等)数值都和原进程一致,但是是一个全新的进程,也称为原进程的子进程。
如果的内存中的数据量非常大的时候,rdb持久化的临时文件就会非常大,几乎是原文件的1倍,性能有所降低。
如果当写操作要立刻持久化的时候,可以执行命令:save
save是全阻塞的,bgsave是异步的。
flushall也会产生dump.rdb文件,清空所有数据库的数据,并保存在dump.rdb文件中。
shutdown也会产生dump.rdb文件,将内存中数据保存在dump.rdb文件中

2、aof(Append Only File)
aof的持久化:
aof是对redis的所有写操作的命令将他保存在.aof文件中,包括flushall和flushdb命令也会。当你flushall后,shuntdown了之后重启redis,keys *的数据是空的,因为.aof文件的最后一个写操作的语句是flushall,即使前面做了很多写操作,flushall后,前面的数据都没了。
当aof和rdb同时存在时,会加载aof文件,假如aof文件的语法有误,启动redis是会报错了,就如spring配置文件的bean错了,tomcat也会启动不了。rdb文件也是。

如果aof或rdb文件语法有误,可以使用上面两条命令来修复。
aof修复命令:redis-check-aof --fix appendonlly.aof
rdb修复命令:redis-check-rdb--fix dump.rdb
aof是采用文件追加方式,将所有的写操作保存在aof文件中,当文件越来越大时,有可能存在相同的写操作,这些相同的操作可以将他浓缩为一条操作,这样可以减少aof文件的容量。
redis对aof新增了一种重写机制,当aof文件大小超过所设定的阈值时,redis会启动aof文件的内容压缩,只保留可以恢复数据的最小指令集,可以使用命令bgrewriteaof。
rewrite的原理:主进程会fork出一条新的进程对文件重写,遍历新进程的内存数据,每条记录有一条set语句。重写aof文件的操作并没有读取旧的aof文件,而是将整个内存的数据内容用命令的方式重写了一个新的aof文件。
触发rewrite的机制:redis会记录上一次重写时aof文件的大小,默认配置是当aof文件大小是上次rewrite后大小的一倍且文件大于64mb时触发。如果启动redis后没有发生重写的,记录aof文件的大小就启动时加载的aof文件大小。

redis的持久化 rdb和aof的更多相关文章
- redis的持久化RDB与AOF
redis 持久化 Redis是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失,为了解决这个问题,Redis提供了两种持久化的方案,将内存中的数据保存到磁盘中,避免数据的丢失. RDB ...
- Redis(五)--- Redis的持久化RDB与AOF
一.Redis数据库 我们都知道Redis是基于内存的数据库,数据是以key-value键值对的方式存储的,那么key-value键值对是随意放在内存中的么,其实Redis的服务会创建很多的数据库空间 ...
- redis之持久化RDB与AOF
redis数据持久化 Redis是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失,为了解决这个问题,Redis提供了两种持久化的方案,将内存中的数据保存到磁盘中,避免数据的丢失. RDB持 ...
- Redis的持久化——RDB和AOF
推荐阅读 Redis 持久化之RDB和AOF --来自ITDragon龙 Redis Persistence --来自Redis官网文档
- Redis之持久化(RDB AOF)
Redis 提供了 RDB 和 AOF 两种持久化方案: RDB:生成指定时间间隔内的 Redis 内存中数据快照,是一个二进制文件 dumpr.rdb AOF:记录 Redis 除了查询以外的所有写 ...
- 配置方案:Redis持久化RDB和AOF
Redis持久化方案 Redis是内存数据库,数据都是存储在内存中,为了避免进程退出导致数据的永久丢失,需要定期将Redis中的数据以某种形式(数据或命令)从内存保存到硬盘.当下次Redis重启时,利 ...
- Redis之数据持久化RDB与AOF
Redis之数据持久化RDB与AOF https://www.cnblogs.com/zackku/p/10087701.html 大家都知道,Redis之所以性能好,读写快,是因为Redis是一个内 ...
- redis的持久化(RDB&AOF的区别)
RDB 是什么? 在指定的时间间隔内将内存中的数据集快照写入磁盘, 也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里. Redis会单独创建(fork)一个子进程来进行持久化,会 ...
- Linux - redis持久化RDB与AOF
目录 Linux - redis持久化RDB与AOF RDB持久化 redis持久化之AOF redis不重启,切换RDB备份到AOF备份 确保redis版本在2.2以上 实验环境准备 备份这个rdb ...
随机推荐
- 无法识别的配置节 applicationSettings
在.NETFramework2.0中,如果发布的虚拟目录程序引用了外部的webservice访问接口,配置文件会出现下边的applicationSettings节点,如 但是访问应用程序时候,可能会出 ...
- Step one : 熟悉HTML
//H1 1 <html> <head> <title>BeiJing</title> </head> <body> <h ...
- LaTex代码生成器
latex代码生成器 希腊字母 \alpha \beta \gamma \delta \epsilon \zeta \eta \theta \iota \kappa \lambda \mu \nu \ ...
- SharePoint SPHierarchyDataSourceControl+SPTreeView
今天使用SPHierarchyDataSourceControl和SPTreeView来显示SharePoint文档库层级结构的过程中,发现一直在报下面的错误: The target 'ctl00$c ...
- 快速构建C++项目工具Scons,结合Editplus搭建开发环境
Windows下C++开发工具用的最多的非VS莫属了(当然也有很多比如eclipse,Qt等等),便捷的项目构建向导,再加上强大的VC助手,使得开发和调试得心应手.并不是说vc就没有缺点,相反缺点也不 ...
- mysql数据类型简介
MySQL的数据表类型很多,其中比较重要的是MyISAM,InnoDB这两种. 这两种类型各有优缺点,需要根据实际情况选择适合的,MySQL支持对不同的表设置不同的类型.下面做个对比: MyISAM表 ...
- 【Linux】CentOS 学习笔记之一(安装配制)
如何打开命令窗口:应用程序>系统工具>终端 如何获取root 权限:在终端下,输入su 再输入密码(密码不显示在屏幕上) 如何将英文版转换成中文: [root@localhost ~]# ...
- Linux IO控制命令生成
在驱动程序里, ioctl() 函数上传送的变量 cmd 是应用程序用于区别设备驱动程序请求处理内容的值.cmd除了可区别数字外,还包含有助于处理的几种相应信息. cmd的大小为 32位,共分 4 个 ...
- 微信小程序开发系列(一)小程序开发初体验
开发小程序所需的基本技能 关于小程序的介绍和使用场景这里不作介绍,这个系列的文章会一步一步地带领大家快速地学习和掌握小程序的开发. 关于还没有接触过小程序的开发者来说,最关心的问题无非就是,开发小 ...
- 【转】关于python中re模块split方法的使用
注:最近在研究文本处理,需要用到正则切割文本,所以收索到了这篇文章,很有用,谢谢原作者. 原址:http://blog.sciencenet.cn/blog-314114-775285.html 关于 ...