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的更多相关文章

  1. redis的持久化RDB与AOF

    redis 持久化  Redis是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失,为了解决这个问题,Redis提供了两种持久化的方案,将内存中的数据保存到磁盘中,避免数据的丢失. RDB ...

  2. Redis(五)--- Redis的持久化RDB与AOF

    一.Redis数据库 我们都知道Redis是基于内存的数据库,数据是以key-value键值对的方式存储的,那么key-value键值对是随意放在内存中的么,其实Redis的服务会创建很多的数据库空间 ...

  3. redis之持久化RDB与AOF

    redis数据持久化 Redis是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失,为了解决这个问题,Redis提供了两种持久化的方案,将内存中的数据保存到磁盘中,避免数据的丢失. RDB持 ...

  4. Redis的持久化——RDB和AOF

    推荐阅读 Redis 持久化之RDB和AOF --来自ITDragon龙 Redis Persistence --来自Redis官网文档

  5. Redis之持久化(RDB AOF)

    Redis 提供了 RDB 和 AOF 两种持久化方案: RDB:生成指定时间间隔内的 Redis 内存中数据快照,是一个二进制文件 dumpr.rdb AOF:记录 Redis 除了查询以外的所有写 ...

  6. 配置方案:Redis持久化RDB和AOF

    Redis持久化方案 Redis是内存数据库,数据都是存储在内存中,为了避免进程退出导致数据的永久丢失,需要定期将Redis中的数据以某种形式(数据或命令)从内存保存到硬盘.当下次Redis重启时,利 ...

  7. Redis之数据持久化RDB与AOF

    Redis之数据持久化RDB与AOF https://www.cnblogs.com/zackku/p/10087701.html 大家都知道,Redis之所以性能好,读写快,是因为Redis是一个内 ...

  8. redis的持久化(RDB&AOF的区别)

    RDB 是什么? 在指定的时间间隔内将内存中的数据集快照写入磁盘, 也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里. Redis会单独创建(fork)一个子进程来进行持久化,会 ...

  9. Linux - redis持久化RDB与AOF

    目录 Linux - redis持久化RDB与AOF RDB持久化 redis持久化之AOF redis不重启,切换RDB备份到AOF备份 确保redis版本在2.2以上 实验环境准备 备份这个rdb ...

随机推荐

  1. Essential C#读书笔记

    Essential C#读书笔记 这是一个多变的时代,一次又一次的浪潮将不同的人推上了巅峰.新的人想搭上这一波,同时老的人也不想死在沙滩上.这些年新的浪潮又一次推开,历史不停地重复上演,那便是移动互联 ...

  2. smartcn与IKanalyzer

    开源中文分词框架分词效果对比smartcn与IKanalyzer 项目背景: 某银行呼叫中心工单数据挖掘和分析项目,旨在利用文本计算实现热点聚焦和舆情分析. 一.引言: 中文分词一直是自然语言处理的一 ...

  3. SQLSERVER一些公用DLL

    SQLSERVER一些公用DLL的作用解释   SQLSERVER一些公用DLL的作用解释 如果你的SQLSERVER安装在C盘的话,下面的路径就是相应SQLSERVER版本的公用DLL的存放路径 S ...

  4. JQuery的插件式开发

    如果你只会JQuery的插件式开发, 那么你可以进来看看? 对于JQuery的学习,已经有3年多的时间了,直到去年与我的组长一起做项目,看到他写的JS,确实特别漂亮,有时甚至还看不太懂, 我才发现其实 ...

  5. Sql Server实现多行数据按分组用逗号分隔成一行数据

    例如,要将下面的数据 以GROUP_ID进行分组,一组一行,一组中的多个PRODUCT_ID用逗号分隔,select 出来成如下结果: 在Sql Server中,我目前想到的一种方法是写一个函数,如下 ...

  6. ASP.NET MVC相关

    Orchard源码分析(7):ASP.NET MVC相关 概述 Orchard归根结底是一个ASP.NET MVC(以后都简称为MVC)应用,但在前面的分析中,与MVC相关内容的涉及得很少.MVC提供 ...

  7. Asycn/Await 异步编程初窥(二)

    经过总过4天的学习和实践,做完了 WinForm 下 .Net 4.5 的基本异步应用,实现了一个 Http 协议下载的测试程序,为以后使用 .Net 4.5 积累知识和经验.这个小程序完成这样几个作 ...

  8. JQ与AJAX 省市区三级联动下拉框

    用于初学者学习基本的联动下拉框,废话不多说,见代码 首先看控制器里的3个下拉框对应代码: public ActionResult GetProvinceList() { ProvinceReposit ...

  9. tomcat的OutOfMemoryError内存溢出解决方法

    在tomcat安装路径bin目录下 打开catalina.bat在第一行加上 set JAVA_OPTS=-Xms64m -Xmx256m -XX:PermSize=128M -XX:MaxNewSi ...

  10. WEB相关知识和Tomcat服务器

    WEB相关知识 1.Internet上供外界访问的Web资源分为: 静态web资源:指web页面中供人们浏览的数据始终是不变的. 动态web资源:指web页面中供人们浏览的数据是由程序产生的,不同时间 ...