Redis持久化

 

redis的持久化分为两种:

  • RDB(redis database)

    将缓存放到一个文件中,默认一段时间去存储一次

    会将内容先放到缓存文件,持久化结束之后,就用缓存文件代替上一次的持久化文件

    优点:会调用子进程来保持持久化,不会有数据库I/O

    缺点:如果持久化的时候数据库丢失了数据,因为是’覆盖的‘所以,就找不到数据了,故适用于不太重要的数据

    简单来说: rdb文件小,易备份,易恢复,恢复快

  • AOF(append only file)

    默认每秒去存储历史命令

    保存的是数据的历史指令,恢复数据的时候是将命令从前到后在执行一遍

    优点:遇突发情况的话能找到以前的记录,且数据丢失较少(1s)

    缺点:每次都有IO操作,对服务器压力较大

    总结:回复慢,数据完整性好,不易备份

 

  redis的一大特点就是可以将数据进行持久化,在一定程度上确保了数据的安全性,但不是绝对的;首先持久化分为rdb(快照持久化)和aof(精细持久化);

 

快照持久化:

  是默认开启的;会自动保存数据,当启动时会在文件夹中生成dump.rdb文件;存放持久化后的数据;

  当然我们也可以设置持久化的频率,在redis.conf文件中通过save进行设置,默认有三种情况,每秒超过一万数据或每5分钟有10条数据的时候再或者每15分钟有1条记录,都会执行快照持久化,当然也可以通过bgsave的方法来手动进行一个快照持久化;(也可以通过ip和端口号就给别人进行手动持久化);如果频繁的快照持久化,会降低性能和效率,但是这样也出现了一个问题,就是当一分钟内如果有一万条数据时,不会提交,但是在下一次提交之前,停电了,这样就会丢失掉这些数据;

  当时想到的解决方法就是和(AOF)精细持久化进行一个结合,达到一个秒级的持久化;这个持久化需要我们手动进行开启,(注意,AOF开启之后,之前的数据都会丢失,所以要在一开始使用时就要配置好)开启的方法就是在配置redis.conf,将appendonly 改为yes;同时还可以更改文件名称;然后重新启动服务,这时精细化持久化就启动好了;

  在快照持久化的同时,我们进行精细持久化,

  比如,我们每隔一个小时进行一次快照持久化,这中间我们添加精细持久化;当55分的时候宕机了,我们还是可以通过RDB和AOF来恢复我们的数据,尽可能减少了损失;等到一个小时以后我们进行了快照持久化,数据就会保存在rdb的文件中,我们就可以将aof的持久化文件重新开始;

   

关于精细持久化也存在三个配置,

always只要发生改变就会发生持久化,这样是很浪费性能的,不推荐使用(我们的CPU不用干其他工作了,就在这里看着持久化)

everysec每秒进行一次快照持久化;推荐使用这种

no 是不确定,看服务器的使用情况(心情)来定(不安全,不推荐)

我们还可以通过把rdb文件和aof文件复制到另外一个redis服务器上,就可以共享数据;

posted @ 2019-06-10 17:22  石智文的博客  阅读(193)  评论(0编辑  收藏  举报