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. MYSQL 数据库结构优化

    数据库结构优化 优化数据大小 使表占用尽量少的磁盘空间.减少磁盘I/O次数及读取数据量是提升性能的基础原则.表越小,数据读写处理时则需要更少的内存,同时,小表的索引占用也相对小,索引处理也更加快速. ...

  2. gym100676 [小熊骑士限定]2015 ACM Arabella Collegiate Programming Contest

    Kuma Rider久违的第二场训练,这场很水,又在vj的榜单上看到第一场的大哥了,2小时ak,大哥牛啤! A.水 #include<cstdio> #include<iostrea ...

  3. 脚本处理iOS的Crash日志

    背景 当我们打包app时,可以选择生成对应的符号表,其保存 16 进制函数地址映射信息,通过给定的函数起始地址和偏移量,可以对应函数具体信息以供分析. 所以我们拿到测试给的闪退日志(.crash)时, ...

  4. SSM搭项目报错:HTTP Status 400 – Bad Request

    具体报错如下: Type Status Report Description The server cannot or will not process the request due to some ...

  5. Datawhale MySQL 训练营 Task3 表操作

    目录 学习内容 1.MySQL 表数据类型 2. 用SQL语句创建表 3. 用SQL语句向表中添加数据 4. 用SQL语句删除表 5. 用SQL语句修改表 作业 参考链接 学习内容 1.MySQL 表 ...

  6. 单纯形法MATALAB实现

    参考单纯形法的步骤,MATALAB中的实现如下(求极小值): 注:对于极大值的求解,只需要对目标函数添加负号,求解出来的\(X\),再带入原目标函数即可. function [ X, z ] = si ...

  7. GearCase UI - 自己构建一套基于 Vue 的简易开源组件库

    最近 1 ~ 2 月除了开发小程序之外,还一直在继续深入的学习 Vuejs.利用零碎.闲暇的时间整合了一套基于 Vue 的 UI 组件库.命名为 GearCase UI,意为齿轮盒.现在把该项目进行开 ...

  8. 基于C#的机器学习--贝叶斯定理-执行数据分析解决肇事逃逸之谜

    贝叶斯定理-执行数据分析解决肇事逃逸之谜 ​ 在这一章中,我们将: 应用著名的贝叶斯定理来解决计算机科学中的一个非常著名的问题. 向您展示如何使用贝叶斯定理和朴素贝叶斯来绘制数据,从真值表中发现异常值 ...

  9. 程序设计 之 C#实现《拼图游戏》 (上)代码篇

    原理详解请参考博客中 拼图游戏(下)原理篇 http://www.cnblogs.com/labixiaohei/p/6713761.html 功能描述: 1.用户自定义上传图片 2.游戏难度选择:简 ...

  10. Django缓存配置和使用

    - 缓存 - 配置 CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', 'LOCAT ...