(一)持久化的概述

持久化顾名思义就是将存储在内存的数据转存到硬盘中。在生活中使用word等应用的时候,如果突然遇到断电的情况,理论上数据应该是都不见的,因为没有保存的word内容都存放在内存里,断电后就会清空,但是重新开启电脑后会发现有一个~$xx.docx的文件,虽然不一定保存所有数据,但是会将大部分数据保存下来,这种“自动备份”这就是持久化的一种实际案例。

(二)redis持久化

redis中的持久化有两种形式,一种是文件快照(类似于把文件拍了张照片保存下来),一种是过程日志(把每一步执行的操作保存下来),分别对应于redis中的RDBAOF操作。

(2.1) RDB

RDB以文件快照的方式保存数据

2.1.1 save操作

使用save指令就能实现RDB的操作,打开redis服务器和客户端,添加一项数据后使用save指令保存。

此时这项数据已经以文件快照的方式保存到硬盘中了。在Windows下默认把这个备份文件放在C:\Users\你的用户名\下

2.1.2 bgsave操作

由于redis是单线程操作,而save指令的执行可能会阻塞当前Redis服务器,如果save指令执行时间长,后面的指令就都需要等待,所以线上环境不建议使用redis。取而代之的是bgsave指令.

bgsave   保存操作,但不是立即执行

当执行bgsave指令后,Redis会生成一个子进程去执行保存操作,Redis内部所有涉及RDB的操作都采用bgsave。

2.1.3 RDB设置

如果需要修改存放位置等信息,就需要进入到redis配置文件中修改,打开你的redis安装目录,选中下图配置文件

可以看到文件中有许多注解和参数,下面介绍几个:


  1. dbfilename dump.rdb 文件名
  2. dir ./ 文件的保存路径,默认./
  3. rdbcompression yes 存储至本地时是否压缩数据,默认开启
  4. rdbchecksum yes 是否进行RDB文件格式校验,默认开启
  5. save second changes 在second时间内发生了changes次变化就执行持久化 如:save 900 1,通常配置文件中会设置多个持久化规则

需要注意的是:Redis想要让配置文件中的信息生效,需要在启动服务时加上配置文件路径

2.1.4 RDB优缺点

首先是优点:

RDB是紧凑压缩的二进制文件,存储效率高。

RDB存储的是某个时间点内的数据快照,适用于数据备份,全量复制等场景。

RDB数据恢复速度快于AOF

缺点:

RDB无法做到实时持久化

bgsave运行时要启动一个子进程,牺牲了部分性能

RDB可能会出现不同版本服务器之间冲突的问题

(2.2) AOF

AOF以过程日志的方式保存每次的命令,保证了数据持久化的实时性

其中需要注意的是第三步,何时把数据从缓存放入硬盘是一个问题。AOF提供了三种策略

1.always(每次):数据零误差,性能低

2.everysec(每秒):准确性较高,性能较高

3.no(系统控制):不可控

2.2.1 开启AOF

在配置文件中找到appendonly,默认是no,改为yes为开启

在配置文件中可以看到系统默认使用了everysec

可以看到在原本生成dump.rdb的同级目录下出现了appendonly.aof

这个文件记录了所有的操作。

2.2.2 AOF重写

随着命令不断写入AOF,文件会越来越大,为了解决这个问题,Redis引入了AOF重写机制压缩文件体积。AOF文件重写是将Redis进程内的数据转化为写命令同步到新AOF文件的过程。简单说就是将对同一个数据的若干个条命令执行结果转化成最终结果数据对应的指令进行记录。

AOF重写规则有以下几点:


  1. 进程内已超时的数据不再写入文件
  2. 忽略无效指令,重写时使用进程内数据直接生成
  3. 对同一数据的多条命令合并为一条命令,如lpush a a,lpush a b转化为lpush a a b

重写的方式

手动重写

bgrewriteaof

自动重写在配置文件中配置


  1. //自动重写触发条件设置
  2. auto-aof-rewrite-min-size size
  3. auto-aof-rewrite-percentage percent

第一条配置是让当前的size和设定的size作比较,当前size大于设定size就执行重写

第二条配置是按设定的百分比作比较,(当前的size-aof_base_size)/ aof_base_size的值大于百分比就执行重写

(2.3) AOF和RDB的区别

两者的区别通过一张表格的形式给到大家:

(三)持久化总结

redis的持久化如何用,用哪一种都需要根据实际情况具体分析。我们不可能让redis去取代mysql进行数据保存,但是在一些场景如断电保护等还是很有必要的。

redis入门到精通系列(五):redis的持久化操作(RDB、AOF)的更多相关文章

  1. redis入门到精通系列(二):redis操作的两个实践案例

    在前面一篇博客中我们已经学完了redis的五种数据类型操作,回顾一下,五种操作类型分别为:字符串类型(string).列表类型(list).散列类型(hash).集合类型(set).有序集合类型(so ...

  2. redis入门到精通系列(四):Jedis--使用java操作redis详解

    (一)前言 如果不把数据库和后端语言联系起来,就起不到数据库应该要起到的作用.Java语言通过JDBC操作mysql,用Jedis操作redis.当然了,java操作redis的方式不止jedis一种 ...

  3. redis入门到精通系列(三):key的通用操作和redis内部db的通用操作

    五种数据类型都用到了key,key本身是一种字符串,通过key可以获取redis中保存的对象.这一篇博客就将介绍key的通用操作. (一)key基本操作 删除key del key key是否存在 e ...

  4. redis入门到精通系列(一)

    (一)为什么要用Nosql 如果你是计算机本科学生 ,那么一定使用过关系型数据库mysql.在请求量小的情况下,使用mysql不会有任何问题,但是一旦同时有成千上万个请求同时来访问系统时,就会出现卡顿 ...

  5. redis入门到精通系列(七):redis高级数据类型详解(BitMaps,HyperLogLog,GEO)

    高级数据类型和五种基本数据类型不同,并非新的数据结构.高级数据类型往往是用来解决一些业务场景. (一)BitMaps (1.1) BitMaps概述 在应用场景中,有一些数据只有两个属性,比如是否是学 ...

  6. redis入门到精通系列(九):redis哨兵模式详解

    (一)哨兵概述 前面我们讲了redis的主从复制,为了实现高可用,会选择一台服务器作为master,多台服务器作为slave.现在有这样一种情况,master宕机了,这时系统会选择一台slave作为m ...

  7. redis入门到精通系列(八):redis的高可用--主从复制详解

    (一)主从复制介绍 前面所讲的关于redis的操作都属于单机操作,单机操作虽然操作简单,但是处理能力有限,无法高可用.所谓高可用性,就是指当一台服务器宕机的时候,有备用的服务器能顶替上,在单机操作上这 ...

  8. redis入门到精通系列(六):redis的事务详解

    (一)事务的概念 谈到数据库的高级应用,不可避免会谈到事务.熟悉mysql的朋友们对事务肯定不陌生,简单来讲事务就是控制一个数据库操作序列要么全部执行要么全部不执行.今天我们就来了解redis中的事务 ...

  9. Redis入门到精通01

    Redis入门到精通 目录 Redis入门到精通 一.Redis缓存框架基本介绍 1.1Redis的应用场景 二.Redis的安装方式 2.1Windows操作系统安装Redis 2.2Linux操作 ...

随机推荐

  1. S2-001漏洞分析

    前言 开始好好学Java,跟着师傅们的文章走一遍 Strust简介 Struts2是流行和成熟的基于MVC设计模式的Web应用程序框架. Struts2不只是Struts1下一个版本,它是一个完全重写 ...

  2. Spring Boot 面试总结

    1.使用 Spring Boot 前景? 多年来,随着新功能的增加,spring变得越来越复杂.只需访问https://spring.io/projects页面,我们就会看到可以在我们的应用程序中使用 ...

  3. Spring中常用注解

    1.@Component 创建类对象,相当于配置<bean/> 2.@Service @Service与@Component功能相同,写在ServiceImpl类上 3.@Reposito ...

  4. [cf1392H]ZS Shuffles Cards

    考虑统计每一轮(以抽到小丑为一轮)的贡献,不难发现答案即期望轮数*每轮期望次数 关于期望轮数,当前牌堆里已经在$S$中的卡实际上没有意义,不妨将这一类卡从牌堆中删除 此时,定义$f_{i}$表示$S$ ...

  5. [atARC078F]Mole and Abandoned Mine

    注意到最终图的样子可以看作一条从1到$n$的路径,以及删去这条路径上的边后,路径上的每一个点所对应的一个连通块 考虑dp,令$f_{S,i}$表示当前1到$n$路径上的最后一个点以及之前点(包括$i$ ...

  6. [nowcoder5671D]Data structure

    问题相当于统计$且\sum_{l\le x<y\le r且lca(x,y)=x}1=c(sz[x],2)-\sum_{son}c(sz[son],2)$,考虑用莫队来维护区间,那么相当于要支持: ...

  7. 四、Zookeeper3.7安装

    前文 一.CentOS7 hadoop3.3.1安装(单机分布式.伪分布式.分布式 二.JAVA API实现HDFS 三.MapReduce编程实例 Zookeeper安装 @ 目录 前文 Zooke ...

  8. Electron跨平台程序破解

    1.  npm install asar -g 2. asar --version 如果有版本号就继续 3.找到需要解压的软件位置  在app.asar的地址输入 asar e app.asar tm ...

  9. 钓鱼小技巧-XLM

    前言 XLM钓鱼不是一项新的技术,自从公开以后,网上有很多对其的分析文章,这里仅仅做一个分享和摸索记录.文章中有问题的地方还请指出. 一个简单的例子 新建一个excel表格,右键选择表,选择插入 插入 ...

  10. Codeforces 1188D - Make Equal(dp)

    Codeforces 题目传送门 & 洛谷题目传送门 首先我们考虑枚举最后这 \(n\) 个数变成的值 \(v\),那么需要的操作次数即为 \(\sum\limits_{i=1}^n\text ...