redis的持久化

Posted 小白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis的持久化相关的知识,希望对你有一定的参考价值。

redis 持久化的概念

Redis 是一个支持持久化的内存数据库,也就是说Redis需要经常将内存中的数据同步到磁盘来保证持久化。Redis支持两种持久化方式,一种是Snapshotting(快照)也是默认方式,另一种是Append-Only File(缩写AOF)的方式。

 

#####################RDB#############

1、Snapshotting(RDB)机制以及运行原理

在某一时刻点保存一个完整的数据快照。
原理:
  1、Redis通过fork产生子进程
  2、父进程继续处理client请求,子进程负责将快照写入临时文件
  3、子进程写完后,用临时文件替换原来的快照文件,然后子进程退出。

2、Snapshotting机制的配置

1、编辑redis.conf文件
2、文件中添加
        save 900 1        #900秒超过1个key被修改
        save 300  10     #300秒超过10个key被修改
        save 60 10000  #60秒超过10000条被修改

 

#################AOF##############

1、Append-Only File(AOF)机制

每一个写操作,将写入log文件,用于数据恢复(写操作包括:insert,delete,update)

2、Append-Only File(AOF)机制运行原理

1、Redis 通过fork一个子进程
2、父进程继续处理client请求,子进程把AOF内容写入缓存区
3、子进程写完退出,父进程接收退出信息,将缓冲区AOF写入临时文件
4、临时文件重命名成appendonly.aof,原来文件被覆盖,整个过程完成

3、Append-Only File(AOF)机制配置

1、编辑redis.conf文件
2、在文件中添加
        appendonly  yes        #启动AOF机制
        appendsync always      #每次收到写命令就立即强制写入磁盘,最慢的,但是保证完全的持久化,不推荐使用
        appendsync everysec    #每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐使用
        appendsync no          #完全依赖os,性能最好,持久化没保证

 

 

RDB与AOF两种方式比较

Snapshotting 
    优势:
            1、RDB产生的文件小
            2、RDB恢复快,并且简单,例如你可以快速的将RDB文件传输到其他主机,做数据的恢复
            3、在进行RDB备份时,主进程仅仅需要创建一个子进程,所有的I/O操作都由子进程完成


    缺陷:
            1、不能完全保证数据安全,在两个备份点之间可能会发生数据丢失
            2、当数据量很大时,创建子进程可能会是一个非常耗时的操作,甚至可能需要1秒,在这个期间,Redis无法向客服端提供服务


AOF
    优势:
            1、数据备份粒度小,数据安全性更高
            2、AOF只会对日志文件进行追加操作,不会修改已经写好的内容。即使在掉电的情况下,AOF日志仍然是可用的。
    
    缺陷:
            1、AOF文件通常比相同的数据集的RDB文件更大
            2、AOF写日志可能会比较慢,这跟fsync的机制有关

总结:RDB快照易丢失数据,AOF模式比较安全,但日志重写时,磁盘IO开销大,容易导致服务器性能严重下降,并且需要足够的物理内存。

 





以上是关于redis的持久化的主要内容,如果未能解决你的问题,请参考以下文章

SpringCloud系列十一:SpringCloudStream(SpringCloudStream 简介创建消息生产者创建消息消费者自定义消息通道分组与持久化设置 RoutingKey)(代码片段

redis数据持久化——AOF重写

Redis的增删改查持久化你会了吗

Redis的增删改查命令总结与持久化方式

深入浅出 Redis 持久化机制

Redis学习缓存持久化哨兵模式