Redis提供了多种不同级别的持久化方式:

  • RDB 持久化可以在指定的时间间隔内产生数据集的时间点快照(point-in-time snapshot)
  • AOF持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。AOF文件中的命令全部以Redis协议的格式来保存,新命令会被追加到文件的末尾.Redis还可以在后台对AOF文件进行重写(rewrite),使得AOF文件的体积不会超过保存数据集状态所需的实际大小。
  • Redis还可以同时使用AOF和RDB持久化。在这种情况下,当Redis重启时,它会优先使用AOF文件来还原数据集,因为AOF文件保存的数据集通常比RDB文件所保存的数据集更完整。
  • 可以关闭持久化功能,让数据只在服务器运行时存在。
RDB的优点
  1. RDB是一个很紧凑的文件,它保存了redis在某个时间点上的数据集。
  2. RDB非常适用于灾难恢复,它只有一个文件,并且内容紧凑,可以将它传送到别的数据中心
  3. 可以最大化redis的性能;父进程在保存RDB文件时,唯一要做的就是fork一个子进程,然后这个子进程就会处理接下来的所有保存工作,父进程无需执行任何磁盘I/O操作
  4. RDB在恢复大数据集的时候比AOF的速度要快
RDB的缺点
  1. 因为RDB是保存在某个时间点上的数据集,这样的话,服务器故障可能会丢失数据。
  2. 每次保存RDB的时候,redis要fork一个子进程,并由子进程来进行实际的持久化工作,在数据集比较大的时候,fork可能会非常耗时,可能会造成服务器停止处理客户端请求;如果数据集非常巨大,并且cpu比较紧张的话,那么 这种停止时间设置可能会长达整整1秒。虽然AOF重写也需要进行fork,但无论AOF重写的执行间隔有多长,数据的耐久性都不会有任何损失
AOF优点
  1. 使用AOF持久化会让redis变得非常耐久,你可以设置不同的fsync策略,比如无fsync,每秒钟一次fsync,或者每次写入命令是fsync。AOF的默认策略为每秒钟fsync一次,在这种配置下,redis仍然可以保持良好的性能,并且就算发生故障停机,也最多只会丢失一秒钟的数据
  2. AOF文件只是一个日志文件追加操作(append only log),因此对AOF文件的写入不需要进行seek,即使日志因为某些原因而包含了未写入完整命令(比如写入时, 磁盘满了,写入时中途停机等),redis-check-aof工具可以轻易的修复这种问题
  3. redis可以在AOF文件体积过大时,自动在后台对AOF进行重写,重写后的AOF文件包含了恢复当前数据集所需的最小命令集合。这个重写操作是绝对安全的,因为redis在创建新的AOF过程中,会继续讲命令追加到现有的AOF文件里面,即使重写过程中发生停机,现有的AOF文件也不会丢失,而一旦新AOF文件创建完毕,redis就会从旧文件切换到新AOF文件,并开始对新AOF文件进行追加操作
  4. AOF文件有序地保存了对数据库执行的所有写入操作,这些写入操作以redis协议的格式保存,因此AOF文件的内容非常容易被人读懂,对文件进行分析也很容易。到处AOF文件也非常简单。
AOF缺点
  1. 对于相同的数据来说,AOF文件的体积通常要大于RDB文件的体积
  2. 根据所使用的fsync策略。AOF的速度可能会慢于RDB。
  3. AOF的bug,曾经因为个别命令的原因,导致AOF文件在重新载入是,无法将数据集恢复成保存时的样子。

redis学习 - 数据持久化的更多相关文章

  1. redis学习——数据持久化

    一.概述 Redis的强大性能很大程度上都是因为所有数据都是存储在内存中的,然而当Redis重启后,所有存储在内存中的数据将会丢失,在很多情况下是无法容忍这样的事情的.所以,我们需要将内存中的数据持久 ...

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

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

  3. 进阶的Redis之数据持久化RDB与AOF

    大家都知道,Redis之所以性能好,读写快,是因为Redis是一个内存数据库,它的操作都几乎基于内存.但是内存型数据库有一个很大的弊端,就是当数据库进程崩溃或系统重启的时候,如果内存数据不保存的话,里 ...

  4. redis配置数据持久化---APPEND ONLY MODE

    Redis配置数据持久化---APPEND ONLY MODE 2016年04月01日 19:05:11 阅读数:9918 Redis可以实现数据的持久化存储,即将数据保存到磁盘上. Redis的持久 ...

  5. Redis学习手册(持久化)

    一.Redis提供了哪些持久化机制: 1). RDB持久化:    该机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘.        2). AOF持久化:    该机制将以日志的形式记录服务 ...

  6. Redis 学习之持久化机制、发布订阅、虚拟内存

    一.持久化机制 Redis是一个支持持久化的内存数据库,redis会经常将内存中的数据同步到硬盘上来保证数据持久化,从而避免服务器宕机数据丢失问题,或者减少服务器内存消耗提高性能. 持久化方式: 1. ...

  7. redis的数据持久化方案

    Redis的持久化方案有两种 1.Rdb方式:快照形式,定期将内存中的数据持久化到硬盘.是Redis默认的数据持久化的形式. Rdb:缺点是:数据还没有更新到磁盘上,突然断电,造成数据的不完整性. 在 ...

  8. redis的数据持久化策略

    redis提供了两种不同的持久化方法来将数据存储到硬盘里面.一种方法叫快照,它可以将存在于某一时刻的所有数据都写入硬盘里面.另一种方法叫只追加文件(AOF),它会在执行写命令时,将被执行的写命令复制到 ...

  9. redis 学习笔记——持久化

    redis持久化 snapshot数据快照(rdb) 这是一种定时将redis内存中的数据写入磁盘文件的一种方案,这样保留这一时刻redis中的数据镜像,用于意外回滚.redis的snapshot的格 ...

随机推荐

  1. Oracle执行SQL查询语句的步骤

    Oracle执行SQL查询语句的步骤 如果用户在SQL*Plus下输入了如下查询语句:SELECT * FROM dept: 查询语句的处理主要包括三个过程:编译(parse).执行(execute) ...

  2. 通过python将xml文件转换成html文件

    #数据类型的转换 def main():    maxwidth = 100  #用于规范字段的长度    print_start()    count=0    while True:        ...

  3. 推荐3个小程序开源组件库——Vant、iView、ColorUI

    推荐3个小程序开源组件库 在进行小程序开发时,经常会遇到编写组件方面的阻碍,这让我们花费大量的时间在页面以及 CSS 样式编写上.因此可以使用开源组件库,有些复杂的组件可以直接拿来使用,节省开发时间, ...

  4. Leetcode_6. Zigzag convertion

    6. Zigzag convertion 对输入的字符串做锯齿形变换,并输出新的字符串,所谓zigzag变化如下图所示. 将"ABCDEFGHIJKL"做4行的锯齿变换,新的字符串 ...

  5. 编写和调试Android下JNI程序流程

    1,切换到Android目录下bin/classes,使用javah命令生成jni所需的头文件,命令类似于:javah com.xxx.ooo,其中,com.xxx为package名称,ooo为包含n ...

  6. wc命令详解

    基础命令学习目录首页 原文链接:http://www.cnblogs.com/peida/archive/2012/12/18/2822758.html Linux系统中的wc(Word Count) ...

  7. linux获得命令使用帮助

    1. 内部命令: help CMD 2. 外部命令: CMD --help 3. 命令手册: manual(所有命令) man CMD 分章节: 1: 用户命令(User Commands - /bi ...

  8. web153

    电影网站:www.aikan66.com 项目网站:www.aikan66.com 游戏网站:www.aikan66.com 图片网站:www.aikan66.com 书籍网站:www.aikan66 ...

  9. bata7

    目录 组员情况 组员1:胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:恺琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:何宇恒 组员11:刘一好 展示组内最新 ...

  10. Java第二天——标识符命名规则、Java的知识、快捷键的使用、Scanner获取值的常用方法

    1.标识符命名规则 字母.下划线.数字.美元符号($)由这四个部分组成. 标识符=首字母+其他 首字母:字母.下划线.美元符号($) 其他:字母.下划线.数字.美元符号($) 注意: 1.首字母不能为 ...