redis的数据持久化

来源:互联网 发布:java读取dwg文件 编辑:程序博客网 时间:2024/05/16 11:49
redis的数据持久化有两种方式:rdb方式,aof方式

rdb方式:对内存中的数据进行快照,将其存储在硬盘中

集中进行快照的方式:

1.根据配置文件进行快照

    save 900 10 意思是在900秒之内,执行了10次或者10次以上的改动次数(不包括获取键值,只是改动),会自动的执行快照。新的快照文件会覆盖旧的快照文件

2.用户执行save或者bgsave的时候

    一般情况下,save命令会阻塞来自客户端的请求,一般不用

    bgsave是异步的执行快照,一般用这个

3.用户执行flushall命令的时候

    这个命令会清楚redis内存数据库中的所有数据。进行快照的条件就是:有自定义的快照条件,无论是否触发。例如:save 900 10

4.执行复制的时候

    这个就是在主从复制的时候,无论是否有自定义的快照条件或者没有手动执行快照命令,都会执行快照


快照文件的存储路径在redis.conf的dir, 快照文件的名字在dbfilename设置


rdb快照的原理:redis会复制一份当前进程的副本,主进程继续接受客户端的请求,子进程将fork瞬间的内存中的数据复制到系统的临时文件中,当子进程完成内存数据的复制后,会会换掉旧的dump.rdb.也就是说,复制的数据是fork时内存中的数据,之后如果还有修改键的操作,会将该片数据复制一份

  
 aof方式

aof方式就是将执行的修改键的操作命令保存起来,在从硬盘恢复数据的时候,会重新执行这些命令

aof文件的存储位置和rdb的位置一样,在配置文件的dir,文件的名字在appendfilename "appendonly.aof"

aof触发的条件在配置文件中,

auto-aof-rewrite-precentage 100

auto-aof-rewrite-min-size 64mb

意思是,当前的aof文件的大小超过上次重写时aof文件大小的百分比多少事执行重写,第二个参数的意思是,限制了允许重写的最小aof文件大小


有的时候,会有覆盖命令,例如:set foo 1 set foo 2

这就会导致在aof文件中,造成命令的冗余,所以为了减小appendonly.aof文件的大小,我们可以手动执行重写bgrewriteaof命令,可以手动的执行重写命令,并且删除冗余的数据


我们在讲数据存储到硬盘的过程中,由于系统缓存的特性,他会将aof文件放在系统的缓存当中,当每过30秒,会执行一次写硬盘的操作,这就可能导致在这30秒内系统宕机,造成数据的丢失,所以我们可以在可以在配置文件对系统存储aof文件的缓存时间修改

appendfsync everysec 意思是,每秒会执行一次同步操作

  
1 0
原创粉丝点击