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

  • Redis的概念  

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

  • Redis的特点
     1. Redis是一个高性能的Key/Value数据库     2. 基于内存     3. 数据类型丰富     4. 持久化     5. 订阅/发布模型
  • Redis与Memcache区别
         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

 

redis介绍(3)RDB和AOF原理解析的更多相关文章

  1. Redis 持久化之RDB和AOF

    Redis 持久化之RDB和AOF Redis 有两种持久化方案,RDB (Redis DataBase)和 AOF (Append Only File).如果你想快速了解和使用RDB和AOF,可以直 ...

  2. 详解Redis持久化(RDB和AOF)

    详解Redis持久化(RDB和AOF) 什么是Redis持久化? Redis读写速度快.性能优越是因为它将所有数据存在了内存中,然而,当Redis进程退出或重启后,所有数据就会丢失.所以我们希望Red ...

  3. redis持久化(RDB、AOF、混合持久化)

    redis持久化(RDB.AOF.混合持久化) 1. RDB快照(snapshot) 在默认情况下, Redis 将内存数据库快照保存在名字为 dump.rdb 的二进制文件中. 你可以对 Redis ...

  4. Redis的持久化——RDB和AOF

    推荐阅读 Redis 持久化之RDB和AOF --来自ITDragon龙 Redis Persistence --来自Redis官网文档

  5. Redis持久化之RDB与AOF

    1. Redis的持久化方式 Redis作为高效的缓存件,它的数据存放在内存中,如果没有配置持久化,那么数据会在重启后丢失,因此如果不是仅用Redis做缓存的话,需要开启Redis的持久化功能,将数据 ...

  6. Redis 持久化之RDB和AOF详解

    一.RDB 详解 RDB 是 Redis 默认的持久化方案.在指定的时间间隔内,执行指定次数的写操作,则会将内存中的数据写入到磁盘中.即在指定目录下生成一个dump.rdb文件.Redis 重启会通过 ...

  7. 【Redis】Redis 持久化之 RDB 与 AOF 详解

    一.Redis 持久化 我们知道Redis的数据是全部存储在内存中的,如果机器突然GG,那么数据就会全部丢失,因此需要有持久化机制来保证数据不会一位宕机而丢失.Redis 为我们提供了两种持久化方案, ...

  8. [转载]Redis 持久化之RDB和AOF

    原文链接:https://www.cnblogs.com/itdragon/p/7906481.html 温馨提示 在正式数据(当然是非生产环境啦)练习以下操作时,一定一定一定记得备份dump.rdb ...

  9. redis持久存储RDB和AOF的区别及优缺点

    1.前言 最近在项目中使用到Redis做缓存,方便多个业务进程之间共享数据.由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能, ...

随机推荐

  1. mysql中UNION ALL用法

    MYSQL中的UNION UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果. 举例说明: select * from table1 u ...

  2. 关于Oracle中的字符的比较

    1.Oracle比较字符串是根据ASCII码来的,第一个字母的ASCII大小比较如果相等再比较下一个: 函数来说明: CREATE OR REPLACE FUNCTION MinOrMax(para1 ...

  3. kubernetes ingress到pod的数据流

    假设现在有一个ingress暴露的服务 example.com.cn,查看一下流量是怎么传输到后端的 使用kubectl get ingress可以查看到如下内容,example.com.cn对应的i ...

  4. gcc 混合连接动态库和静态库

    当对动态库与静态库混合连接的时候,使用-static会导致所有的库都使用静态连接的方式.这时需要作用-Wl的方式 gcc test.cpp -L. -Wl,-Bstatic -ltestlib  -W ...

  5. onclick时间加return和不加return的区别

    JAVASCRIPT在事件中调用函数时用return返回值实际上是对window.event.returnvalue进行设置. 而该值决定了当前操作是否继续.当返回的是true时,将继续操作.当返回是 ...

  6. Ruby中Time的常用函数

      Time的常用函数 时间对象. Time.now返回当前时间. 1.Time.at Time.at(time[, usec]) 返回time所指时间的Time对象. time可以是Time对象,也 ...

  7. Week6&7——第一次项目冲刺(Alpha版本)

    Deadline: 2017-11-11 10:00PM,以博客发表日期为准. 评分基准: 按时交 - 有分(需求&原型改进与系统设计-10分,敏捷冲刺-70分),检查的项目包括后文的三个方面 ...

  8. Java 获取汉字串首字母并大写和获取汉字的全拼,英文字符不变

    在开发中我们难免会遇到需要提出汉字中的拼音的首字母.提出汉字的拼音,接着便介绍一个工具类 pinyin4j.jar,首先需要下载 jar 包. Pinyin4j是一个功能强悍的汉语拼音工具包,是sou ...

  9. Android应用博客目录

    应用有很多,开个博客都放进来方便查找,也方便修改 1 语言类: 1.1 JAVA 基础语言知识JAVA Collection与Collections,Array与Arrays的区别 JAVA练手--S ...

  10. 域名(Domain Name)

    是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置,地理上的域名,指代有行政自主权的一个地方区域). 域名是一个IP地址 ...