zoukankan      html  css  js  c++  java
  • Redis数据持久化

    Redis数据持久化

    Redis将内存存储和持久化存储相结合,即可提供数据访问的高效性,又可保证数据存储的安全性

    1. Redis数据持久化机制介绍

      1). RDB持久化:

           该机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘。    

      2). AOF(append only file)持久化:

             该机制将以日志的形式记录服务器所处理的每一个写操作,在Redis服务器启动之初会读取该文件来重新构建数据库,以保证启动后数据库中的数据是完整的。

           3). 同时应用AOF和RDB。

           4). 无持久化:

              可通过配置的方式禁用Redis服务器的持久化功能,这样我们就可以将Redis视为一个功能加强版的memcached了

    2. Redis数据持久化配置与测试

    • l RDB快照方式:

    缺省情况下,Redis会将数据集的快照dump到dump.rdb文件中。此外,我们也可以通过配置文件来修改Redis服务器dump快照的频率,在打开redis.conf文件之后,我们搜索save,可以看到下面的配置信息:

    save 900 1              
    #在900秒(15分钟)之后,如果至少有1个key发生变化,则dump内存快照。
    
    save 300 10            
    #在300秒(5分钟)之后,如果至少有10个key发生变化,则dump内存快照。
    
    save 60 10     

    #在60秒(1分钟)之后,如果至少有10000个key发生变化,则dump内存快照。

    注意:关于dump.rdb文件存储的位置,它是设置是在redis.conf文件中

    dir ./

    这段配置指的是服务器启动时的当前路径。

    AOF日志文件方式:在redis.conf文件中

    • AOF日志持久化机制的开启:
    将appendonly  no  改为
    
    appendonly  yes
    • AOF同步方式的配置:

         在Redis的配置文件中存在三种同步方式,它们分别是:

        #appendfsync  always     #每次有数据修改发生时都会写入AOF文件。
    
        appendfsync  everysec  #每秒钟同步一次,该策略为AOF的缺省策略。
    
        #appendfsync  no          #从不同步。高效但是数据不会被持久化。

    RDBAOF对比

    • RDB的优势

        1). 数据的备份和恢复非常方便,因为一个数据库只有一个持久化文件

        2). 性能最大化。对于Redis的服务进程而言,在开始持久化时,它唯一需要做的只是fork出子进程,之后再由子进程完成这些持久化的工作,这样就可以极大的避免服务进程执行IO操作了。

        3). 相比于AOF机制,如果数据集很大,RDB的启动效率会更高。

    • RDB的劣势

               1).系统一旦在定时持久化之前出现宕机现象,此前没有来得及写入磁盘的数据都将丢失。

               2). 由于RDB是通过fork子进程来协助完成数据持久化工作的,因此,如果当数据集较大时,可能会导致整个服务器停止服务几百毫秒,甚至是1秒钟。

    • AOF的优势

            1). 该机制可以带来更高的数据安全性,即数据持久性。Redis中提供了3种同步策略,即每秒同步、每修改同步和不同步。

    2).对日志文件的写入操作采用的是append模式,因此在写入过程中即使出现宕机现象,也不会破坏日志文件中已经存在的内容。

    3). 如果日志过大,Redis可以自动启用rewrite机制迅速“瘦身”(也可手动触发aof的rewrite操作,命令: bgrewriteaof)

         4). AOF日志格式清晰、易于理解,很容易用AOF日志文件完成数据的重建。

    • AOF的劣势

          1). 对于相同数量的数据集而言,AOF文件通常要大于RDB文件。

          2). 根据同步策略的不同,AOF在运行效率上往往会慢于RDB。总之,每秒同步策略的效率是比较高的,同步禁用策略的效率和RDB一样高效。

  • 相关阅读:
    计算 时间戳 时间差
    Convert.ToInt32(string '000000003') 变成了 3
    mvc 二级域名 重定向
    访问微信的统一下单接口经常超时 操作超时
    EF 批量更新删除(linq篇)
    java提供了native2ascii工具
    局域网内Tomcat服务器没法访问
    程序实现发送邮件
    InputStream和OutputStream与String之间的转换
    开发中/listfile.jsp(11,31) quote symbol expected 这个错误
  • 原文地址:https://www.cnblogs.com/alexzhang92/p/10162413.html
Copyright © 2011-2022 走看看