redis支持两种持久化方式,一种是RDB方式,另一种是AOF方式。redis3.0windows版本默认关闭AOF(appendonly no),而开启RDB,当达到一定条件时,redis就会将内存中的所有数据生成一份副本并存储到硬盘上。

RDB持久化:

RDB持久化会在dir目录下产生一个以.rdb为后缀名的文件,在配置文件中配置dir目录及文件名,默认dir目录是跟目录,文件名是dump.rdb。

redis在4种情况下会进行RDB持久化:

1.根据配置规则自动进行RDB持久化:

默认配置文件是这样写的:

save  900  1

save  300  10

save  60  10000

每一行第一个数是多少毫秒的意思,第二个数是被更改的键的数量。这三行条件是或的关系,无论达到哪一个条件,redis就会自动RDB持久化。比如说第一行,如果在900秒内有1个键被更改,redis就会自动RDB持久化。可以根据项目需要,更改此配置规则。

2.主动执行持久化命令:

这样的命令有2个,save(对应jedis.save()方法)、bgsave(对应jedis.bgsave()方法),这两个命令一执行,不管配置文件中有没有配置自动持久化的条件,都会RDB持久化。但是值得注意的是,save命令是同步的持久化,会阻塞客户端的请求,不应避免在生产环境中用。bgsave命令是异步的持久化,不会阻塞客户端的请求。

3.执行清库命令:

执行flushall命令(对应jedis.flushAll()方法)时,只要在配置文件中配置了自动RDB持久化的条件,即使达不到其中任何一条条件,也会进行RDB持久化。

4.主从复制时:

当设置了主从模式时,即使没有设置自动RDB持久化的条件,也会在复制初始化时进行RDB持久化。

AOF持久化:

AOF是append only file,字面意思是往文件追加,其实就是把每一条写命令保存到硬盘上的一个文件上(读命令不会保存),文件名和文件路径在配置文件中配置,默认也在根目录,文件名是appendonly.aof。

redis默认关闭AOF,需要我们修改配置文件来开启AOF:appendonly yes,这样在redis服务一启动的时候就会在dir目录里创建aof文件,如果有的话(人为复制进去),就会读取aof文件内容,加载数据到内存。

将写命令保存到aof文件中的频率是可以在配置文件中配置的,默认是appendfsync everysec即每秒保存一次,这也是最好的方式。配置文件中还有另外两种可以选,appendfsync always即是每执行一条写命令就保存到文件中,这种方式是最安全的,但是要知道执行一条命令的速度是毫秒级的,所以这种方式是也是最耗费性能的。还有一种appendfsync no,最不常用,意思是由操作系统来决定,这简直是扯淡,不确定性太大。

aof文件还可以重写,为什么重写?比如说执行了100条写命令,但这些写命令都是对同一个键操作的,可能第100条命令就把前99条的结果覆盖了,这时候实际上只需要第100条命令就好了。aof文件重写可以自动重写,也可以调用命令直接重写。

自动重写条件可以在配置文件中配置,默认是

auto-aof-rewrite-percentage 100

auto-aof-rewrite-min-size 64mb,即aof文件大小超过上次重写后的100%时会重写,但是文件大小要最少达到64M。

手动重写命令是bgrewriteaof(对应jedis.bgrewriteaof()),当执行了这个命令之后,aof文件就会立刻重写。

如果没有开启AOF,那么redis启动后redis会在dir目录中找rdb文件。如果有(在第一次启动时,人为添加一个rdb文件也可以),则读取rdb文件并加载数据到内存中,之后按照配置的规则来进行RDB持久化。如果没有(可能被人为删掉了),则在第一次RDB持久化的时候创建rdb文件,此后还是按照配置的规则来进行RDB持久化。

如果开启了AOF,那么redis就会在启动的时候读取aof文件的内容加载数据到内存中,即使aof文件内容为空,也不会去读取rdb文件。如果没有(可能redis上次运行的时候没有进行操作或者aof文件被人为的删掉了),则新建,之后按照配置的规则往文件里写数据。运行过程中,如果人为删掉aof文件,也不会再创建了,重启之后就会丢数据。

redis持久化探究的更多相关文章

  1. redis持久化RDB和AOF

    Redis 持久化: 提供了多种不同级别的持久化方式:一种是RDB,另一种是AOF. RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot). AO ...

  2. Redis持久化

    Redis持久化 快照(默认) 将内存中的数据以快照的方式写入到二进制文件中,默认文件名是dump.rdb. 配置自动化做快照持久化(如redis在n秒内如果超过m个key被修改就自动做快照) sav ...

  3. redis——持久化篇

    众所周知,redis是内存数据库,它把数据存储在内存中,这样在加快读取速度的同时也对数据安全性产生了新的问题,即当redis所在服务器发生宕机后,redis数据库里的所有数据将会全部丢失. 为了解决这 ...

  4. redis持久化机制

    redis持久化 redis的数据存在内存中,所以存取性能好.但是存在内存中的数据存在一个问题,一旦机器重启,内存数据消失.为了解决这个问题,redis支持持久化.持久化就是为了解决内存数据丢失时恢复 ...

  5. Redis-cluster集群【第二篇】:redis持久化

    Redis持久化原理: Redis支持两种持久化:RDB和AOF模式 一.名词解释: RDB:持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot).AOF ...

  6. Redis持久化实践及灾难恢复模拟

    参考资料: Redis Persistence http://redis.io/topics/persistence Google Groups https://groups.google.com/f ...

  7. Redis持久化-数据丢失及解决(转载)

    本文转载自        Redis持久化-数据丢失及解决  感谢原作者 Redis的数据回写机制 Redis的数据回写机制分同步和异步两种, 同步回写即SAVE命令,主进程直接向磁盘回写数据.在数据 ...

  8. Redis持久化-数据丢失及解决

    Redis的数据回写机制 Redis的数据回写机制分同步和异步两种, 同步回写即SAVE命令,主进程直接向磁盘回写数据.在数据大的情况下会导致系统假死很长时间,所以一般不是推荐的. 异步回写即BGSA ...

  9. 关于Redis持久化

    Redis有两种持久化的方式:快照(RDB文件)和追加式文件(AOF文件) RDB持久化方式是在一个特定的间隔保存某个时间点的一个数据快照. AOF(Append only file)持久化方式则会记 ...

随机推荐

  1. delphi变量作用域

    完全摘自网络(一件飘雪),供参考: 很多初学者对delphi单元的变量和函数访问权限不理解,在此我举例说明,希望初学者看此文后能茅塞顿开. delphi单元的变量和函数访问权限问题如下两个单元描述: ...

  2. matlab里textread出现错误“Trouble reading floating point number from file (row 1, field 1)”

    matlab里textread出现错误“Trouble reading floating point number from file (row 1, field 1)” 解决办法:traindata ...

  3. JDOM与DOM主要有两方面不同

    我这丝毫没有吐槽的意思哟,只是想说作为一个合格的程序员大家最起码需要做到思维严谨这点,在有能力的情况下对用户体验能提点建议最好.自己写的代码一定要经过严格测试再交付,不要指望测试人员帮你测试再去修改, ...

  4. ng-Directive

    伪代码: var myModule = angular.module(...); myModule.directive('namespaceDirectiveName', function facto ...

  5. 移动端默认返回按键,使用h5+修改默认事件

    hbuilder的h5+提供开发webapp的诸多便利,很多手机自带back虚拟按键,如果不修改其默认事件,点一下app就退出了,所以我这里提供一种修改这个按键默认事件事件的代码. 首先你要用hbui ...

  6. TheFifthWeekText

    类的构造方法是当创建对象时,对象自动调用的对对象进行初始化的方法.他没有返回值,而且构造方法名与类名是相同的.如果类中没有定义构造方法,Java编译器在编译时会自动给它提供一个没有参数的默认构造方法, ...

  7. jquery 学习笔记 (2)--write less,do more

    $(window).load(function(){      })           window.onload=function(){ } toggle()方法 toggle()方法的语法结构: ...

  8. apache增加php版本

    把新的php版本解压到与旧的php版本相同目录 在新的php文件夹根目录复制一个 php.ini-development 重命名为 php.ini打开php.ini, 搜索 extension_dir ...

  9. 新手站长选择WordPress程序建站需要注意的8个问题

    文章出自:http://www.banwagongvps.com/119.html 如今我们不论是出于个人的兴趣爱好,还是出于我们希望通过搭建自己的网站获利的动机,入门级别的都变得非 常的简单,我们只 ...

  10. hdu1020

    #include <stdio.h> int main(void){ int n,i,c; char txt[10001]; scanf("%d", &n); ...