redis对数据的持久化有两种方式:RDB(快照保存)和AOF(命令日志)。

RDB

介绍:将内存快照保存到磁盘,dump.rdb二进制文件
触发:满足“N 秒内数据集至少有 M 个改动”,或使用save/bgsave命令。save同步阻塞客户端,bgsave异步后台存储。
工作:
  • Redis 调用forks,产生子进程,同时拥有父进程和子进程
  • 子进程将数据集写入到一个临时 RDB 文件中
  • 当子进程完成对新 RDB 文件的写入时,Redis 用新 RDB 文件替换原来的 RDB 文件,并删除旧的 RDB 文件

配置:save <seconds> <changes>,如save 60 1000,60s内至少有1000个key set,才会保存快照

优点:适合于保存某个时间点或时间段的数据集;后台保存,不影响前端响应;恢复数据时,速度快。
缺点:redis以外终止时,会丢失配置时间内的数据;改动平凡时,fork子进程比较耗时。

AOF

介绍:Append-only File,将修改命令追加到日志文件末尾appendonly.aof,redis重启时通过执行AOF中的命令来恢复数据集。
触发:通过配置指定每秒,或每次修改时,调用fsync保存命令
配置:
#打开aof
appendonly yes
#fsync策略
#appendfsync always
appendfsync everysec
#appendfsync no

工作:
当AOF文件比较大时,可以使用BGREWRITEAOF,重写AOF文件,只保留能恢复数据的最小命令集,以减少文件大小。
  • Redis 执行 fork() ,现在同时拥有父进程和子进程。
  • 子进程开始将新 AOF 文件的内容写入到临时文件。
  • 对于所有新执行的写入命令,父进程一边将它们累积到一个内存缓存中,一边将这些改动追加到现有 AOF 文件的末尾,这样样即使在重写的中途发生停机,现有的 AOF 文件也还是安全的。
  • 当子进程完成重写工作时,它给父进程发送一个信号,父进程在接收到信号之后,将内存缓存中的所有数据追加到新 AOF 文件的末尾。
  • Redis 原子地用新文件替换旧文件,之后所有命令都会直接追加到新 AOF 文件的末尾。

优点:redis异常时,丢失数据少;aof文件可以重写,减少日志大小;aof文件易懂,可以人工修改。

缺点:相同的数据集,aof文件比rdb文件大;重启时,恢复速度慢;根据fsync策略,aof速度可能慢于rdb,频繁append。
补:
同时开启两种持久化方式,redis会使用aof文件来恢复原始数据;
通常使用rdb备份数据库,因为便于移动备份,恢复快。

redis系列-redis的持久化的更多相关文章

  1. Redis系列三之持久化

    一.Redis持久化 Redis是一个支持持久化的内存数据库,redis需要经常将内存中的数据同步到磁盘来保证持久化. redis提供了不同级别的持久化方法: Snapshotting(快照,默认方式 ...

  2. redis系列-redis的使用场景

    redis越来越受大家欢迎,提升下速度,做下缓存,完成KPI之利器呀.翻译一篇文章<<How to take advantage of Redis just adding it to yo ...

  3. Redis系列(4)_持久化方式-RDB

    一.概念 在指定的时间间隔内将内存中的数据集快照写入磁盘(满足指定时间间隔和操作次数两个条件),也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里 二.配置文件(redis.con ...

  4. redis系列:RDB持久化与AOF持久化

    前言 什么是持久化? 持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘).持久化的主要应用是将内存中的对象存储在数据库中,或者存储在磁盘文件中.XML数 ...

  5. redis系列-redis的连接

    Redis 是完全开源免费的,遵守BSD协议,先进的key - value持久化产品.它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list ...

  6. Redis系列---redis简介01

    一. 本章我们将用简短的几句话来帮助你快速的了解什么是redis,初学者不必深究 1 Redis简介 Remote Dictionary Server(Redis)是一个开源的使用ANSI C语言编写 ...

  7. Redis 系列

    Redis 系列 [Redis 系列(01)安装配制] [Redis 系列(02)数据结构] [Redis 系列(03-1)进阶 - 发布订阅] [Redis 系列(03-2)进阶 - 事务] [Re ...

  8. 《吊打面试官》系列-Redis哨兵、持久化、主从、手撕LRU

    你知道的越多,你不知道的越多 点赞再看,养成习惯 前言 Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行360°的刁难.作为一个在互联 ...

  9. Redis系列(三):Redis的持久化机制(RDB、AOF)

    本篇博客是Redis系列的第3篇,主要讲解下Redis的2种持久化机制:RDB和AOF. 本系列的前2篇可以点击以下链接查看: Redis系列(一):Redis简介及环境安装. Redis系列(二): ...

随机推荐

  1. 用Backbone.js创建一个联系人管理系统(五)

    原文: Build a Contacts Manager Using Backbone.js: Part 5 这是这系列教程最后一部分了. 之前所有的增删改都在前端完成. 这部分我们要把Contact ...

  2. hdoj 1272 小希的迷宫

    上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说如果有一个通道连通了 ...

  3. Android Sqlite 工具类封装

    鉴于经常使用 Sqlite 数据库做数据持久化处理,进行了一点封装,方便使用. 该封装类主要支持一下功能 支持多用户数据储存 支持 Sqlite数据库升级 支持传入 Sql 语句建表 支持 SQLit ...

  4. C.C++把整个文件内容读进一个buffer中

    原创文章,未经本人允许禁止转载. //C方式, 调用的函数繁多 //fopen,fseek,ftell,fseek,malloc,fread,fclose,free. void foo() { FIL ...

  5. java读取properties配置文件总结

    java读取properties配置文件总结 在日常项目开发和学习中,我们不免会经常用到.propeties配置文件,例如数据库c3p0连接池的配置等.而我们经常读取配置文件的方法有以下两种: (1) ...

  6. php压缩文件

    $filename = './qrcode.zip'; // 最终生成的文件名(含路径) //生成文件 $zip = new ZipArchive (); // 使用本类,linux需开启zlib,w ...

  7. JS无刷新分页插件

    本文介绍一个本人自己写的一JS分页插件 <script src="/Js/smart.page.min.js" type="text/javascript" ...

  8. 在項目中快速部署SLF4J+LOGBACK

    想了解SLF4J,LOGBACK是什么?可以访问:http://www.slf4j.org/    http://logback.qos.ch/ 本文大部分参考了Cody Burleson<Ho ...

  9. C# Exception 写入文件

    /// <summary> /// 将异常打印到LOG文件 /// </summary> /// <param name="ex">异常< ...

  10. 最喜欢的算法(们) - Levenshtein distance

    String Matching: Levenshtein distance Purpose: to use as little effort to convert one string into th ...