Redis提供的持久化机制:

1). RDB持久化:该机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘。

2). AOF持久化:该机制将以日志的形式记录服务器所处理的每一个写操作,在Redis服务器启动之初会读取该文件来重新构建数据库,以保证启动后数据库中的数据是完整的。

3). 无持久化:我们可以通过配置的方式禁用Redis服务器的持久化功能。

4). 同时应用AOF和RDB。

快照(RDB)默认持久化方式

  将内存中数据以快照的方式写入二进制文件中,默认文件名为dump.rdb。可以通过配置设置redis服务器自动做快照持久化的方式。我们可以配置redis在n秒内如果超过了m个修改就自动做快照。
snapshotting默认设置:
save 900 1 #900秒内如果超过1个key被修改,则发起快照保存
save 300 10 #300秒内如果超过10个key被修改,则发起快照保存
save 60 10000
  对于Redis的服务进程而言,在开始持久化时,它唯一需要做的只是fork出子进程,子进程将快照数据写入到临时RDB文件中,当子进程完成数据写入操作后,再用临时文件替换老的文件,这样就可以极大的避免服务进程执行IO操作了。每次快照持久化都是将内存数据完整写入到磁盘一次,并不是增量的只同步增量数据。所以如果数据量大的话,写操作会比较多,必然会引起大量的磁盘IO操作,可能会严重影响性能。
  注意:快照方式是在一定间隔时间做一次,如果redis意外宕机,就会丢失最后一次快照后的所有数据的修改。

  对于灾难恢复而言,我们可以非常轻松的将一个单独的文件压缩后再转移到其它存储介质上。
  由于RDB是通过fork子进程来协助完成数据持久化工作的,如果当数据集较大时,可能会导致整个服务器停止服务几百毫秒,甚至是1秒钟。

日志追加方式(append-only file:aof)方式

  redis会将每一个收到的命令都通过write函数追加到命令中,当redis重新启动时会重新执行文件中保存的写命令来在内存中重建这个数据库的内容,这个文件在bin目录下:appendonly.aof。当然由于操作系统会在内核中缓存write做的修改,所以可能不是立即写到磁盘上,这样的持久化还是有可能丢失部分修改。但是可以通过配置文件告诉redis通过fsync函数强制操作系统写入到磁盘的时机。
aof设置:
appendonly yes //启动aof持久化方式有三种修改方式
#appendfsync always //收到写命令就立即写入到硬盘,效率最慢,但是保证完全持久化
#appendfsync everysec //每秒种就写入一次硬盘,在性能和持久化方面做了折中
#appendfsync no //完全依赖操作系统,性能最好,但是持久化没保证,不知道何时持久化
  事实上,每秒同步也是异步完成的,其效率也是非常高的,所差的是一旦系统出现宕机现象,那么这一秒钟之内修改的数据将会丢失。而每修改同步,我们可以将其视为同步持久化,即每次发生的数据变化都会被立即记录到磁盘中。可以预见,这种方式在效率上是最低的。
  由于该机制对日志文件的写入操作采用的是append模式,因此在写入过程中即使出现宕机现象,也不会破坏日志文件中已经存在的内容。然而如果我们本次操作只是写入了一半数据就出现了系统崩溃问题,不用担心,在Redis下一次启动之前,我们可以通过redis-check-
  如果日志过大,Redis可以自动启用rewrite机制。即Redis以append模式不断的将修改数据写入到老的磁盘文件中,同时Redis还会创建一个新的文件用于记录此期间有哪些修改命令被执行。因此在进行rewrite切换时可以更好的保证数据安全性。
  对于相同数量的数据集而言,AOF文件通常要大于RDB文件。日志追加的方式导致持久化文件会变得越来越大。例如调用incr intsmaze命令100次,文件中就保存了100条命令,其实有99条都是多余的。因为要恢复数据库状态其实文件中保存一条set intsmaze 100就可以了。为了压缩这种持久化方式的日志文件,redis提供了bgrewriteaof命令。收到此命令redis将使用与快照类似的方式将内存中的数据以命令的方式保存到临时文件中,最后替换原来的持久化日志文件。
  实际中使用always方式,开启了always方式,redis的并发量就会下去。实际生产中都不会用快照的方式。

Redis的数据备份:

    在Redis中我们可以通过copy的方式在线备份正在运行的Redis数据文件。这是因为RDB文件一旦被生成之后就不会再被修改。Redis每次都是将最新的数据dump到一个临时文件中,之后在利用rename函数原子性的将临时文件改名为原有的数据文件名。因此我们可以说,在任意时刻copy数据文件都是安全的和一致的。鉴于此,我们就可以通过创建cron job的方式定时备份Redis的数据文件,并将备份文件copy到安全的磁盘介质中。

原文和作者一起讨论: http://www.cnblogs.com/intsmaze/p/6818210.html

redis持久化快速回忆手册的更多相关文章

  1. Redis基础知识点面试手册

    Redis基础知识点面试手册 基础 概述 数据类型 STRING LIST SET HASH ZSET(SORTEDSET) 数据结构 字典 跳跃表 使用场景 会话缓存 缓存 计数器 查找表 消息队列 ...

  2. Redis学习——Redis持久化之AOF备份方式保存数据

    新技术的出现一定是在老技术的基础之上,并且完善了老技术的某一些不足的地方,新技术和老技术就如同JAVA中的继承关系.子类(新技术)比父类(老技术)更加的强大! 在前面介绍了Redis学习--Redis ...

  3. Redis 持久化之RDB和AOP

    Redis 持久化之RDB和AOP Redis 有两种持久化方案,RDB (Redis DataBase)和 AOP (Append Only File).如果你先快速了解和使用RDB和AOP,可以直 ...

  4. 深入Redis持久化

    转载:https://segmentfault.com/a/1190000017193732 一.Redis高可用概述 在介绍Redis高可用之前,先说明一下在Redis的语境中高可用的含义. 我们知 ...

  5. Redis 持久化之RDB和AOF

    Redis 持久化之RDB和AOF Redis 有两种持久化方案,RDB (Redis DataBase)和 AOF (Append Only File).如果你想快速了解和使用RDB和AOF,可以直 ...

  6. Redis持久化概念

    redis持久化概念 Author:SimpleWu GitHub-redis 什么是持久化? 概念:把内存的数据保存在磁盘的过程. Redis的持久化? redis是内存数据库,它把数据存储在内存中 ...

  7. redis持久化详述

    本来打算根据自己搜索的一些文章写些总结,后来发现了一篇好文,这里转载下,在自己博客里面记录下. 原文链接:https://www.cnblogs.com/kismetv/p/9137897.html ...

  8. Redis持久化之RDB&&AOF的区别

    在说Redis持久化之前,需要搞明白什么是数据库状态这个概念,因为持久化的就是将内存中的数据库状态保存到磁盘上.那么什么是数据库状态呢?Redis是一个key-value数据库服务器,一般默认是有16 ...

  9. redis持久化详解

    一.RDB持久化 RDB 持久化 可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot). 优点:快速持久化.占用磁盘空间少.适合于用做备份,主从复制也是基于RD ...

随机推荐

  1. 手动的写一个structs

    为了更好的学习框架的运行机制,这里开始学习框架之前,介绍一个简单的自定义的框架. 需求: 登录:id:aaa,pwd:888登录成功之后,跳转到,index.jsp页面并显示,欢迎你,aaa 注册,页 ...

  2. 走入PHP-变量、运算符

    通过define()定义常量: PHP 5.3.0之后,可以使用const关键字在类定义之外定义常量: 下面是PHP的几个魔术变量: PHP支持一个执行运算符:反引号(``),PHP将尝试将反引号中的 ...

  3. 云片-语音验证码--短信验证码 - PHP接口

    ///////////////////////语音验证///////////////////////////// /**  * 发送短信(语音验证码)云片语音服务  * @param  $apikey ...

  4. 在亚马逊Red Hat 7.1 linux上安装mysql

      安装前检查之前是否安装并卸载之前的和删除关联文件 rpm -qa|grep mysql     yum remove mysql mysql-server mysql-libs mysql-com ...

  5. css3圆环闪烁动画

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. JSTL 核心标签库 使用(转)

    在JSP的开发中,迭代是经常要使用到的操作.例如,逐行的显示查询的结果等.在早期的JSP中,通常使用Scriptlets来实现Iterator或者Enumeration对象的迭代输出.现在,通过JST ...

  7. VSCode里的一些有用的插件

    1.EaseServer 作用:开启本地 http server,然后在browser里打开html: 在调试页面的时候,打开页面比较方便,不需要先开启server,再打开html 2.Debugge ...

  8. JavaWeb之session

    Session是服务器端技术 利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自 ...

  9. 3.Redis常用命令:String

    字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等.在Redis中字符串类型的Value ...

  10. SQL语句中的日期查询

    我们先创建一个表: CREATE TABLE `student` ( `id` INT NOT NULL AUTO_INCREMENT , `name` VARCHAR(10) NULL COMMEN ...