zoukankan      html  css  js  c++  java
  • redis 之redis持久化rdb与aof

    redis是内存型的数据库

    重启服务器丢失数据

    重启redis服务丢失数据

    断电丢失数据

    Redis是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失,为了解决这个问题,Redis提供了两种RDB (Redis DataBase)和 AOF (Append Only File)持久化的方案,将内存中的数据保存到磁盘中,避免数据的丢失。

    .redis持久化之RDB

    RDB(持久化)

    内存数据保存到磁盘

    在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot

    优点:速度快,适合做备份,主从复制就是基于RDB持久化功能实现

    rdb通过再redis中使用save命令触发 rdb

      1.基于内存的数据快照

      2.定期执行数据快照

      3.手动触发数据快照

    rdb配置参数:

    # 持久化存储目录

    dir /data/6379/

    # 持久化存储文件名

    dbfilename  dbmp.rdb

    每过900秒 有1个操作就进行持久化

    save 900秒  1个修改类的操作

    save 300秒  10个操作

    save 60秒  10000个操作

    将这些加到redis配置文件中:

    dir /data/6379/

    dbfilename  dbmp.rdb

    save  900 1

    save 300 10

    save 60  10000

    1.修改配置文件,启动redis服务端

    port 6379                        # redis 程序端口                    
    daemonize yes                    # 后台守护启动
    dir /data/6379                   # 定义持久化文件存储位置
    pidfile /data/6379/redis.pid     # redis进程pid文件
    loglevel notice                  # 日志级别
    logfile "/data/6379/redis.log"   # redis日志log文件
    protected-mode yes               # 保护模式,安全模式
    #bind 10.0.0.10  127.0.0.1       # redis绑定地址
    
    dbfilename  dbmp.rdb             # rdb持久化文件名
    # requirepass hsz                # redis登录密码设置,redis一般不要密码进行注释
    save 900 1                       # rdb机制 每900秒 有1个修改记录
    save 300 10                      # 每300秒        10个修改记录
    save 60 10000                    # 每60秒内        10000修改记录
    port 6379
    daemonize yes
    dir /data/6379
    pidfile /data/6379/redis.pid
    loglevel notice
    logfile "/data/6379/redis.log"
    protected-mode yes
    # requirepass hsz 
    #bind 10.0.0.10  127.0.0.1
    
    dbfilename  dbmp.rdb
    save 900 1
    save 300 10
    save 60 10000
    简洁版

    2.保存后关闭redis,生成持久化文件,并 验证持久化生效

    最后验证,加上配置后,数据得到了保存

    .redis持久化之AOF

    AOFappend-only log file
    记录服务器执行的所有变更操作命令(例如set del等),并在服务器启动时,通过重新执行这些命令来还原数据集
    AOF 文件中的命令全部以redis协议的格式保存,新命令追加到文件末尾。
    优点:最大程度保证数据不丢失 (RDB要好,因为RDB有可能丢失数据)
    缺点:日志记录非常大

    redis-client   写入数据  >  redis-server   同步命令   >  AOF文件

    1.在配置文件中,添加aof参数

    配置参数

    AOF持久化配置,两条参数

     

    appendonly yes

    appendfsync  always    总是修改类的操作

                 everysec   每秒做一次持久化

                 no     依赖于系统自带的缓存大小机制

    2.准备aof配置文件 redis.conf

    在配置文件中添加:

    appendonly yes

    appendfsync everysec

    3.启动redis服务,添加与验证aof的持久化

    redis-server /opt/redis_conf/redis_6379.conf

    (1)添加数据

    (2)关闭后,重新开启redis验证

    [root@node209 redis_conf]#  redis-server /opt/redis_conf/redis_6379.conf 
    [root@node209 redis_conf]# pkill redis
    [root@node209 redis_conf]# ps aux|grep redis
    root       5891  0.0  0.0 112708   964 pts/2    S+   09:25   0:00 grep --color=auto redis
    [root@node209 redis_conf]#  redis-server /opt/redis_conf/redis_6379.conf 
    [root@node209 redis_conf]# redis-cli
    127.0.0.1:6379> keys *
    1) "age"
    2) "name"
    127.0.0.1:6379> 
    
    # 写入数据,实时检查aof文件信息
    # tail -f appendonly.aof

    .redis 不重启从rdb持久化切换到aof持久化

    1.前提条件是启动的有rdb配置的redis

    配置文件为:

    port 6379
    daemonize yes
    dir /data/6379
    pidfile /data/6379/redis.pid
    loglevel notice
    logfile "/data/6379/redis.log"
    protected-mode yes
    # requirepass hsz 
    #bind 10.0.0.10  127.0.0.1

    2.确保redis中有数据

    未来保存安装可以备份rdb的持久化文件:

    cp dbmp.rdb dbmp.rdb.bak

    3.开启aof持久化

    开启后便生成了aof持久化文件,说明没有重启的情况下,切换成功

    # 配置开启AOF
    127.0.0.1:6379> config set appendonly yes
    # 关闭RDB
    127.0.0.1:6379> config set save ""
    
    未来永久生效,即使重启以后也还有aof持久化,那就在配置文件上进行配置aof持久化配置,见二或见截图

    RDB存在哪些优势呢?

    1)一旦采用该方式,那么你的整个Redis数据库将只包含一个文件,这对于文件备份而言是非常完美的。比如,你可能打算每个小时归档一次最近24小时的数据,同时还要每天归档一次最近30天的数据。通过这样的备份策略,一旦系统出现灾难性故障,我们可以非常容易的进行恢复。

    2)对于灾难恢复而言,RDB是非常不错的选择。因为我们可以非常轻松的将一个单独的文件压缩后再转移到其它存储介质上。

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

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

     

    RDB又存在哪些劣势呢?

    1). 如果你想保证数据的高可用性,即最大限度的避免数据丢失,那么RDB将不是一个很好的选择。因为系统一旦在定时持久化之前出现宕机现象,此前没有来得及写入磁盘的数据都将丢失。

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

    AOF的优势有哪些呢?

    1). 该机制可以带来更高的数据安全性,即数据持久性。Redis中提供了3中同步策略,即每秒同步、每修改同步和不同步。事实上,每秒同步也是异步完成的,其效率也是非常高的,所差的是一旦系统出现宕机现象,那么这一秒钟之内修改的数据将会丢失。而每修改同步,我们可以将其视为同步持久化,即每次发生的数据变化都会被立即记录到磁盘中。可以预见,这种方式在效率上是最低的。至于无同步,无需多言,我想大家都能正确的理解它。

    2). 由于该机制对日志文件的写入操作采用的是append模式,因此在写入过程中即使出现宕机现象,也不会破坏日志文件中已经存在的内容。然而如果我们本次操作只是写入了一半数据就出现了系统崩溃问题,不用担心,在Redis下一次启动之前,我们可以通过redis-check-aof工具来帮助我们解决数据一致性的问题。

    3). 如果日志过大,Redis可以自动启用rewrite机制。即Redisappend模式不断的将修改数据写入到老的磁盘文件中,同时Redis还会创建一个新的文件用于记录此期间有哪些修改命令被执行。因此在进行rewrite切换时可以更好的保证数据安全性。

    4). AOF包含一个格式清晰、易于理解的日志文件用于记录所有的修改操作。事实上,我们也可以通过该文件完成数据的重建。

     

     

    redis 持久化方式有哪些?有什么区别?

    rdb:基于快照的持久化,速度更快,一般用作备份,主从复制也是依赖于rdb持久化功能

    aof:以追加的方式记录redis操作日志的文件。可以最大程度

     

  • 相关阅读:
    Codeforces Round #592 (Div. 2)C. The Football Season(暴力,循环节)
    Educational Codeforces Round 72 (Rated for Div. 2)D. Coloring Edges(想法)
    扩展KMP
    poj 1699 Best Sequence(dfs)
    KMP(思路分析)
    poj 1950 Dessert(dfs)
    poj 3278 Catch That Cow(BFS)
    素数环(回溯)
    sort与qsort
    poj 1952 buy low buy lower(DP)
  • 原文地址:https://www.cnblogs.com/hszstudypy/p/11554905.html
Copyright © 2011-2022 走看看