zoukankan      html  css  js  c++  java
  • Redis学习笔记六:持久化实验(AOF,RDB)

    作者:Grey

    原文地址:Redis学习笔记六:持久化实验(AOF,RDB)

    Redis几种持久化方案介绍和对比

    AOF方式:https://blog.csdn.net/ctwctw/article/details/105173842

    RDB方式:https://blog.csdn.net/ctwctw/article/details/105265689

    对比:https://blog.csdn.net/ctwctw/article/details/105147277

    准备工作

    安装Redis,可以参考Redis学习笔记一:安装和配置

    AOF实验

    如果按照准备工作中的方法安装的redis,找到配置文件,默认在如下位置

    vi /etc/redis/6379.conf
    

    修改这两个配置

    appendonly yes
    
    appendfsync always
    # appendfsync everysec
    # appendfsync no
    

    打开always选项,仅为了实验用,生产环境慎用,或者用everysec。

    配置好以后,可以通过

    service redis_6379 restart
    

    重启redis

    然后查看一下redis的data目录,默认在如下位置:

    ls /var/lib/redis/6379
    

    显示了aof文件

    [root@db01 6379]# ls /var/lib/redis/6379
    appendonly.aof
    

    通过redis-cli连上redis,执行一些命令

    
    [root@db01 6379]# redis-cli
    127.0.0.1:6379> mset k1 a k2 b k3 c k4 d
    OK
    127.0.0.1:6379> set k5 e
    OK
    127.0.0.1:6379> mget k1 k2 k3 k4 k5
    1) "a"
    2) "b"
    3) "c"
    4) "d"
    5) "e" 
    
    

    模拟数据被摧毁操作,执行flushall

    127.0.0.1:6379> flushall
    OK
    

    退出redis-cli客户端,查看aof文件内容

    [root@db01 6379]# cat /var/lib/redis/6379/appendonly.aof 
    *2
    $6
    SELECT
    $1
    0
    *9
    $4
    mset
    $2
    k1
    $1
    a
    $2
    k2
    $1
    b
    $2
    k3
    $1
    c
    $2
    k4
    $1
    d
    *3
    $3
    set
    $2
    k5
    $1
    e
    *1
    $8
    flushall
    

    所有操作都被记录下来了,假设我们要恢复摧毁前的数据,我们可以这样操作,打开aof文件,并把最后一行的flushall操作删除, 然后执行

    redis-cli  --pipe < /var/lib/redis/6379/appendonly.aof
    

    重新连接redis,查看数据,全部恢复:

    [root@db01 6379]# redis-cli
    127.0.0.1:6379> mget k1 k2 k3 k4 k5
    1) "a"
    2) "b"
    3) "c"
    4) "d"
    5) "e"
    

    AOF的rewrite

    假设我们执行:

    127.0.0.1:6379> set k1 123
    OK
    127.0.0.1:6379> set k1 345
    OK
    127.0.0.1:6379> del k1
    (integer) 1
    127.0.0.1:6379> set k1 786
    

    其实只需要保留最后一条执行结果即可,如果我们不开启rewrite, 那么aof文件内容会是这样:

    [root@db01 6379]# cat appendonly.aof 
    *2
    $6
    SELECT
    $1
    0
    *3
    $3
    set
    $2
    k1
    $3
    123
    *3
    $3
    set
    $2
    k1
    $3
    345
    *2
    $3
    del
    $2
    k1
    *3
    $3
    set
    $2
    k1
    $3
    786
    
    

    接下来我们开启rewrite,

    连接redis-cli, 执行如下命令

    127.0.0.1:6379> bgrewriteaof
    Background append only file rewriting started
    
    

    再次查看aof文件,变成了如下:

    [root@db01 6379]# cat appendonly.aof 
    *2
    $6
    SELECT
    $1
    0
    *3
    $3
    SET
    $2
    k1
    $3
    786
    

    也可以通过配置两个参数来自动触发rewrite,具体参数为:

    auto-aof-rewrite-min-size
    auto-aof-rewrite-percentage
    

    参数含义见官方文档,不赘述。

    RDB实验

    将aof方式先停用

    vi /etc/redis/6379.conf
    

    将这个配置改为no

    appendonly no
    

    删掉遗留的aof文件

    rm -rf /var/lib/redis/6379/appendonly.aof
    

    进入redis-cli,并清库

    flushall
    

    然后删掉dump.rdb文件

    rm -rf /var/lib/redis/6379/dump.rdb
    

    经过如上操作,redis目前数据为空,且备份文件也为空,关闭了aof策略,现在开始修改redis的配置文件,配置rdb的策略

    vi /etc/redis/6379.conf
    

    配置如下信息

    # 60秒之内,至少有5个key发生变化,就触发rdb
    save 60 5
    
    # 默认的rdb文件名为:dump.rdb
    dbfilename dump.rdb
    
    # 默认rdb文件的位置
    dir /var/lib/redis/6379
    

    配置修改完毕

    重启redis

    重新连接redis-cli, 快速执行一些操作(一分钟之内至少set 5个key)

    127.0.0.1:6379> set k1 a
    OK
    127.0.0.1:6379> set k2 b
    OK
    127.0.0.1:6379> set k3 c
    OK
    127.0.0.1:6379> set k4 5
    OK
    127.0.0.1:6379> set k5 dd
    OK
    127.0.0.1:6379> set k6 dasdfas
    OK
    127.0.0.1:6379> set k7 5sdfas
    

    将生成的dump.rdb文件先重命名

     mv /var/lib/redis/6379/dump.rdb /var/lib/redis/6379/dump.rdb.backup
    

    重新连接redis-cli。模拟摧毁数据操作

    flushall
    

    停掉redis

    service redis_6379 stop
    

    将备份的dump文件重新还原

     mv /var/lib/redis/6379/dump.rdb.backup /var/lib/redis/6379/dump.rdb
    

    重新启动redis

    service redis_6379 start
    

    重新连接redis-cli,查看数据是否恢复

    [root@db01 6379]# redis-cli
    127.0.0.1:6379> keys *
    1) "k1"
    2) "k5"
    3) "k2"
    4) "k3"
    5) "k6"
    6) "k4"
    7) "k7"
    127.0.0.1:6379> mget k1 k2 k3 k4 k5 k6 k7
    1) "a"
    2) "b"
    3) "c"
    4) "5"
    5) "dd"
    6) "dasdfas"
    7) "5sdfas"
    
    

    如上,数据全部恢复。

    混合方式

    Redis 4.0 后持久化新增混合持久化,混合持久化指的是在开启后,将持久化文件同时以RDB格式和AOF格式 一块写入aof文件中,将aof重写的数据存入RDB中,在生成RDB中如果很大,则需要时间,那么这段时间客户端对redis的操作,将会追加写入aof文件,并且他们两个最后一块写入aof文件中

    混合持久化性能更优秀,同时兼顾RDB 和AOF ,解决aof重启恢复慢,也同时进行AOF操作

    修改配置文件

    vi /etc/redis/6379.conf
    

    配置如下几项

    # 开启混合持久化
    aof-use-rdb-preamble yes
    
    # 默认是64mb,为了模拟效果,我临时改成0mb,这样的话,每次都会触发混合模式
    auto-aof-rewrite-min-size 0mb
    

    重启redis

    重新连接redis-cli,快速执行一些操作,再一次查看aof文件

    cat /var/lib/redis/6379/appendonly.aof 
    

    image

  • 相关阅读:
    在ashx页面中获取session
    写给程序猿们的交互设计
    javascript如何合并多个数组
    <%%>
    #实用# 在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的节是错误的原因
    通过ContentType = "text/XML" 实现ASP输出xml
    [记录] Host Office Document In WebBrowser control in a Windows Form Application.
    [转载]error LNK2001: unresolved external symbol __DllMainCRTStartup@12错误
    Access database not open
    一些Access MVP们的博客
  • 原文地址:https://www.cnblogs.com/greyzeng/p/14779852.html
Copyright © 2011-2022 走看看