zoukankan      html  css  js  c++  java
  • redis介绍(3)RDB和AOF原理解析

    简单科普一下redis的概念:(会的可忽略)

    • Redis的概念  

        redis基于内存的Key Value类型的NoSQL数据库.

    •  Redis的特点
       1. Redis是一个高性能的Key/Value数据库     2. 基于内存     3. 数据类型丰富     4. 持久化     5. 订阅/发布模型 
    •  RedisMemcache区别
           Redis是一个内存型数据库产品,Memcache是一个内存型缓存产品,Redis 以对内存中的数据进行持久化,Memcache不行

    下面来搞一下redis的持久化的一些知识

        补充:

          Redis中数据存储模式有2种:cache-only,persistence

        • cache-only即只做为“缓存”服务,不持久数据,数据在服务终止后将消失,此模式下也将不存在“数据恢复”的手段,是一种安全性低/效率高/容易扩展的方式;
        • persistence即为内存中的数据持久备份到磁盘文件,在服务重启后可以恢复,此模式下数据相对安全。

          对于persistence持久化存储,Redis提供了两种持久化方法   

        • Redis DataBase(简称RDB)
        • Append-only file (简称AOF)

        注意:除了这两种方法,Redis在早起的版本还存在虚拟内存的方法,现在已经被废弃。

        

    redis的持久化方案有两种,下面详细讲一下:

        redis持久化方式分为两种:RDB快照和AOF方式(默认为RDB模式),当Redis服务器重启的时候,会自动恢复数据,优先从AOF中恢复,其次才从RDB中恢复

      RDB原理:

        RDB:快照方式,允许你每隔一段时间对内存数据做一次快照然后存储到硬盘中。该方式是Redis默认的持久化方式。

          优点:使用单独子进程来进行持久化,主进程不会进行任何IO操作,保证了redis的高性能 
          缺点:RDB是间隔一段时间进行持久化,如果持久化之间redis发生故障,会发生数据丢失。所以这种方式更适合数据要求不严谨的时候

        

        RDB可以通过在配置文件中配置时间或者改动键的个数来定义快照条件,编辑配置文件redis.conf,找到

          save 900 1  #15分钟之内至少有一个建被更改则进行快照
          save 300 10  #5分钟之内至少有10个建被更改则进行快照
          save 60 10000  #1分钟之内至少有1000个建被更改则进行快照
        

        他们之间是或的关系,RDB持久化到磁盘的文件默认路径是在当前目录,文件名为dump.rdb,你可以通过配置文件配置dir和dbfilename来指定文件目录和文件名称,RDB文件还可以进行压缩,你可以通过配置rdbcompression参数来进行压缩。

          

        

          

           RDB机制的完成流程
            1 redis的主进程 fork子进程 完成RDB写操作
            2 redis的主进程对提供服务,子进程会把当前数据库中的数据,写入临时文件
            3 当临时文件写好之后,覆盖原有的RDB快照文件

        AOF原理(增量式复制 日志式复制)

          AOF方式原理:AOF就可以做到全程持久化,Redis每执行一个修改数据的命令,都会把这个命令添加到AOF文件中,当Redis重启时,将会读取AOF文件进行“重放”以恢复到 Redis关闭前的最后时刻。

          注意:  默认redis会使用RDB的方式进行持久化.redis中即使用RDB 又使用AOF ,redis会应用AOF

          

          AOF运行机制

            

             AOF比RDB更加安全,记录每一次的写操作.但是如果在写的过程中掉电,也会丢失少量数据

            

          AOF:通过将发送到服务器的写操作命令记录下来,形成AOF文件,文件默认名称是appendonly.aof,可以通过appendfilename来指定文件名称。你可以通过配置文件打开AOF功能

          appendonly yes

          AOF的原理是直接把用户插入到服务器的命令追加到结尾,那么文件会原来越大,一些重复的写命令也会越来越多,这时,我们可以利用BGREWRITEAOF 命令来重写AOF,重写的配置如下:

          auto-aof-rewrite-percentage 100 #aof文件大小超过上次重写时文件大小的百分之几开始重写,如果之前没有写过,则根据启动时文件大小。
    
          auto-aof-rewrite-min-size 64mb #限制允许重写时的最小文件大小。

          AOF在同步内存数据到磁盘上时,并不是马上把文件写如到磁盘中,而是先把文件缓存到系统,然后每隔30秒将文件写入到磁盘中,我们可以在配置文件中配置同步的策略

          appendfsync always #每次都同步,保证数据不会丢失,但会慢
          appendfsync everysec #每秒同步,系统默认同步策略
          appendfsync no #不主动同步,由操作系统决定,快,但数据容易丢失


      

    注意:

        Redis持久化的问题:
          假定初始Redis使用RDB进行持久化 , 切换AOF进行持久化.问题?
            RDB --- bgsave ---- dump.rdb
            AOP --- appendonly.aof 获取数据

        热切换:
          改变redis.conf文件 appendonly yes

     
  • 相关阅读:
    VS调试问题整理 :无法在Web服务器上启动调试。您不具备调试此应用程序的权限...
    WebService参考 :什么是Web Services?(AMT研究院 袁磊)
    .NET和J2EE该相互学习什么?(转)
    使用 Visual Studio 2005 Team System 进行单元测试并生成用于 Unit Test Framework 的源代码 (实例)
    C#参考 :ReferenceEquals, == , Equals
    使用 Visual Studio 2005 Team System 进行单元测试并生成用于 Unit Test Framework 的源代码(详解)
    HTML参考 :TBODY元素 详解
    Indigo参考 (2) DataContract 使用 详解(转)
    Indigo参考 (1) :第一个Indigo Service (转)
    控件用法参考:DataList和Repeater控件的分页显示功能
  • 原文地址:https://www.cnblogs.com/huhongy/p/7654815.html
Copyright © 2011-2022 走看看