zoukankan      html  css  js  c++  java
  • RDB和AOF

    RDB

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

    #打开redis-cli
    set k1 v1
    set k2 v2
    set k3 v3
    set k4 v4
    set k5 v5
    keys *
    rewrite
    #然后找到dump.rdb
    linux -> cp dump.rdb dump_bac.rdb
     
    然后回到redis-cli
    flushall
    keys *
    #可以看到什么都没有了
    #这时退出client,把dump_bac改回dump.rdb,然后重新进入client
     
    keys *
    #可以看到所有的keys都回来了
    #相当于做了一个临时快照,使得数据可以持久化到磁盘上,不至于断电后丢失
    
    AOF

    AOF :Redis 默认不开启。它的出现是为了弥补RDB的不足(数据的不一致性),所以它采用日志的形式来记录每个写操作,并追加到文件中。Redis 重启的会根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。

    #打开配置文件,需要手动把no改为yes
    appendonly yes
     
    #指定本地数据库文件名,默认值为 appendonly.aof
    appendfilename "appendonly.aof"
     
    #指定更新日志条件
    # appendfsync always
    appendfsync everysec
    # appendfsync no
     
    #always:同步持久化,每次发生数据变化会立刻写入到磁盘中。性能较差当数据完整性比较好(慢,安全)
    #everysec:出厂默认推荐,每秒异步记录一次(默认值)
    #no:不同步
     
    #配置重写触发机制
    #当AOF文件大小是上次rewrite后大小的一倍且文件大于64M时触发,一般都设置为3G,64M太小了
    auto-aof-rewrite-percentage 100
    auto-aof-rewrite-min-size 64mb
     
    [root@itdragon bin]# vim appendonly.aof
    appendonly yes
    [root@itdragon bin]# ./redis-server redis.conf
    [root@itdragon bin]# ./redis-cli -h 127.0.0.1 -p 6379
    127.0.0.1:6379> keys *
    (empty list or set)
    127.0.0.1:6379> set keyAOf valueAof
    OK
    127.0.0.1:6379> FLUSHALL 
    OK
    127.0.0.1:6379> SHUTDOWN
    not connected> QUIT
    [root@itdragon bin]# ./redis-server redis.conf
    [root@itdragon bin]# ./redis-cli -h 127.0.0.1 -p 6379
    127.0.0.1:6379> keys *
    1) "keyAOf"
    127.0.0.1:6379> SHUTDOWN
    not connected> QUIT
    [root@itdragon bin]# vim appendonly.aof
    fjewofjwojfoewifjowejfwf
    [root@itdragon bin]# ./redis-server redis.conf
    [root@itdragon bin]# ./redis-cli -h 127.0.0.1 -p 6379
    Could not connect to Redis at 127.0.0.1:6379: Connection refused
    not connected> QUIT
    [root@itdragon bin]# redis-check-aof --fix appendonly.aof 
    'x              3e: Expected prefix '*', got: '
    AOF analyzed: size=92, ok_up_to=62, diff=30
    This will shrink the AOF from 92 bytes, with 30 bytes, to 62 bytes
    Continue? [y/N]: y
    Successfully truncated AOF
    [root@itdragon bin]# ./redis-server redis.conf
    [root@itdragon bin]# ./redis-cli -h 127.0.0.1 -p 6379
    127.0.0.1:6379> keys *
    1) "keyAOf"
    

    根据AOF文件恢复数据

    正常情况下,将appendonly.aof 文件拷贝到redis的安装目录的bin目录下,重启redis服务即可。但在实际开发中,可能因为某些原因导致appendonly.aof 文件格式异常,从而导致数据还原失败,可以通过命令redis-check-aof –fix appendonly.aof 进行修复 。

    AOF的重写机制

    前面也说到了,AOF的工作原理是将写操作追加到文件中,文件的冗余内容会越来越多。所以聪明的 Redis 新增了重写机制。当AOF文件的大小超过所设定的阈值时,Redis就会对AOF文件的内容压缩。

    • 重写的原理:Redis 会fork出一条新进程,读取内存中的数据,并重新写到一个临时文件中。并没有读取旧文件。最后替换旧的aof文件。

    • 触发机制:当AOF文件大小是上次rewrite后大小的一倍且文件大于64M时触发。这里的“一倍”和“64M” 可以通过配置文件修改。

    AOF的优缺点

    优点:数据的完整性和一致性更高

    缺点:因为AOF记录的内容多,文件会越来越大,数据恢复也会越来越慢。

  • 相关阅读:
    django学习第85天Django的Ajax
    django学习第84天Django常用字段和参数
    django学习第83天Django聚合查询.分组查询.FQ查询
    django学习第82天Django多表查询
    django学习第81天Django模板层2(单表查询.模块的导入和继承.静态文件配置)
    django学习第80天Django模板层1
    django学习第79天Django视图层
    Linux 内核文档翻译
    Linux设备模型——设备驱动模型和sysfs文件系统解读
    内核空间内存申请函数kmalloc kzalloc vmalloc的区别
  • 原文地址:https://www.cnblogs.com/beizhai/p/13838845.html
Copyright © 2011-2022 走看看