数据库
首页 > 数据库> > redis持久化的取舍和选择

redis持久化的取舍和选择

作者:互联网

1.持久化的作用

什么是持久化
    redis的数据都是放在内存当中,持久化是对数据的更新异步的保存在磁盘当中

主流数据库的持久化实现方式
    快照:将某一时间点的数据进行copy或者是记录,然后异步的写入到磁盘上
        mysql dump  redis rdb
    写日志:将数据的操作都记录到日志里面
        mysql binlog,redis aof,hbase hlog

 

2.rdb

什么是rdb?
  rdb就用于是redis内存中的数据集快照保存在硬盘上的,用于备份和数据恢复,也是复制的媒介。
    可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)。
    优点:速度快,适合于用做备份,主从复制也是基于RDB持久化功能实现的。
    缺点:会有数据丢失(宕机的情况如果没有持久化,就会丢失当前时间到配置响应时间的数据)

触发机制
    1.save 同步命令
    串行执行,有可能造成redis阻塞,造成redis服务端不会正常的响应客户端。
    如果存在老的文件,会新老替换
    时间复杂度为o(n),将所有的数据做一个快照同步到硬盘上
    2.bgsave(backgroundsave ) 异步命令
    异步执行,使用linux的fock函数,生成了redis的子进程redis-rdb-bgsave,让子进程完成rdb的生成。
    在大多数情况下fock函数创建redis子进程非常快,一般不会阻塞redis,redis服务端会正常的响应客户端。
        bgsvae是所有内存中的数据生成到一个临时文件里面temp-子进程id.rdb,在执行完毕后修改成配置文件里面定义的文件名
    时间复杂度为o(n)。
    3.自动触发 
        满足任意一条就会生成rdb文件,但是一般不使用自动触发(自动配置)
        save 900 1   # 900秒(15分钟)内有1个更改
      save 300 10  # 300秒(5分钟)内有10个更改
      save 60 10000 # 60秒内有10000个更改
    
    4.触发机制不容忽略的方式
        1.全量复制
        2.debug reload   # 不需要将内存中数据进行清空的重启,会触发rdb文件的生成
        3.shutdown   # 关闭的时候,有个参数shutdown save
        
配置文件
    vim /data/redis/config/redis.conf
    daemonize yes  # 守护进程的模式
    pidfile /data/redis/redis-6379.pid  # 防止pid占用
    port 6379
    dir /data/redis/data  # RDB持久化文件,日志文件,aod持久化文件的存放路径,一般选择比较大的磁盘
    logfile 6379.log  # 日志文件
    slowlog-max-len 1000   # 慢日志队列的大小,默认128
    slowlog-log-slower-than 1000    # 慢日志阀值,默认是10ms
    dbfilename dump-端口.rdb  # rdb持久化备份的文件,备份话就将rdb文件拷贝走,默认是dump.rdb
    stop-writes-on-bgsave-error yes  #如果bgsave出现错误是否停止写入,如果出现错误,就停止写入。
    rdbcompression yes  # rdb是否采用压缩的格式,文件会比较小,主从复制速度较快
    rdbchecksum yes     # 是否对rdb文件校验
        
总结
    1.rdb是redis数据从内存到硬盘的快照,用于持久化
    2.save通常会阻塞redis
    3.bgsave不会阻塞redis,但是会fock新的进程
    4.save的自动配置满足任一条件就会被执行
    5.有些触发机制不容忽视

 rdb现存问题
   1.耗时,消耗性能
     从内存读取所有数据,会消耗时间,阻塞redis也会消耗时间
     fock()会消耗内存,copy-on-write策略
     磁盘io性能消耗
   2.不可控,丢失数据

 

 

 

3.aof

4.rbd和aod的选择

5.

 

标签:文件,持久,redis,取舍,内存,rdb,save
来源: https://www.cnblogs.com/p0st/p/12397889.html