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. C# 语言规范_版本5.0 (第17章 特性)

    1. 特性 C# 语言的一个重要特征是使程序员能够为程序中定义的实体指定声明性信息.例如,类中方法的可访问性是通过使用 method-modifiers(public.protected.intern ...

  2. ABAP字符串操作 截取字符长度 取位数

    ABAP字符串操作   ABAP對字串的操作方法與其他語言的操作有較大差別,以下是較常用的對字串操作的方法: 1. 字串的連接:CONCATENATEDATA: t1 TYPE c LENGTH 10 ...

  3. 7. Shell 函数

    1. 格式 [ function ] funname [()] { action; [return int;] } 可以带function fun() 定义,也可以直接fun() 定义,不带任何参数 ...

  4. perl-Thread-Queue for openwrt

    在centos7下运行 openwrt trunk的时候提示需要perl-thread-queue. yum install perl-thread-queue,提示没有这个文件.百度和google, ...

  5. js 的四种设计模式的优缺点

    原始模式: var Car = new Object; Car.color = "blue"; Car.door = 4; Car.showColor = function() { ...

  6. Network: Why 1472B length of ICMP?

    when ping, specifying the length of the packet by: ping localhost -l 32 Actually default is -l 32, s ...

  7. Fighting For 2017 Season Contest 1

    比赛地址[https://vjudge.net/contest/147011#problem/A].960626 题目一:[http://codeforces.com/problemset/probl ...

  8. ansible尝试

    1.下载软件 http://releases.ansible.com/ansible/ 2.软件安装 [root@Yangjian-VM02-241 ansible-stable-2.0.0.1]# ...

  9. Android设置对话框去除黑边

    在res/values/styles.xml文件中添加如下内容 <style name="dialog" parent="@android:style/Theme. ...

  10. CodeForces 703B Mishka and trip

    简单题. 先把环上的贡献都计算好.然后再计算每一个$capital$ $city$额外做出的贡献值. 假设$A$城市为$capital$ $city$,那么$A$城市做出的额外贡献:$A$城市左边城市 ...