• Redis学习笔记(2)


    Redis的持久化

    Redis的持久化有RDBAOF两种机制,两种机制可以同时生效,当两个文件(dump.rdb、appendonly.aof)同时存在时,Redis重启时优先采用AOF方式恢复数据。

    RDB(Redis Database)

    RDB持久化方式能够在指定的时间间隔能对你的数据(snapshot快照)进行快照存储

    • Redis单独创建(fork)(复制,子进程与原进程的所有数据完全一样)一个子进程用于持久化,会将内存中的数据写入临时文件,待持久化过程结束后,再用这个临时文件替换上次持久化好的文件
    • dump.rdb
    • redis-check-dump
    • 主进程不需要IO操作,极大地保证了性能
    • 缺点是最后一次持久化的数据可能丢失,fork时会产生两倍的膨胀性。适用场景为数据规模大、对数据完整性要求不高的情景
    • 配置:SNAPSHOTTING

    AOF(Append Only File)

    AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据,AOF命令以redis协议追加保存每次写的操作到文件末尾。Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大

    • 以日志的形式来记录每个写操作(类似于MySQL的redo日志)

    举个例子, 如果你不小心执行了 FLUSHALL 命令, 但只要 AOF 文件未被重写, 那么只要停止服务器, 移除 AOF 文件末尾的 FLUSHALL 命令, 并重启 Redis , 就可以将数据集恢复到 FLUSHALL 执行之前的状态。

    • appendonly.aof
    • 仅在断电等特殊情况下可能丢失一秒的数据
    • AOF文件的体积更大。AOF文件超过指定大小时,会触发重写机制,Redis会对AOF内容进行压缩。可以使用bgrewriteaof指令保留最小指令集
    • 重写机制

    AOF文件过大(默认配置为当AOF文件大小是上次rewrite后大小的一倍且大于64MB时触发)时,会fork一条新进程重写文件(先写临时文件再rename)。具体方法为:遍历新进程的内存中数据,每条记录产生一条set语句,并没有读取旧的aof文件。这方面与快照有点类似。

    • 可通过redis-check-aof修复aof文件
    • 配置:APPEND ONLY MODE

    Redis.conf 之 SNAPSHOTTING

    save

    save <seconds> <changes>
    

    disable:不设置任何save指令,或传入空字符串“”

    In the example below the behaviour will be to save:
    after 900 sec (15 min) if at least 1 key changed
    after 300 sec (5 min) if at least 10 keys changed
    after 60 sec if at least 10000 keys changed

    注:shutdown命令和一般情况下的flushall、flushdb命令会导致dump文件立即更新,即删库后最新dump文件恢复后Redis内容为空。因此需要备份历史dump文件。

    在Redis终端中使用savebgsave命令强制更新dump文件。

    save和bgsave的区别在于bgsave是在后台进行快照的异步处理,快照仍能响应客户端请求

    stop-writes-on-bgsave-error

    默认为yes,代表持久化过程出错时停止写入

    配置为no表示不在乎数据不一致或者有其他应对手段

    rdbcompression

    对快照的持久化启用LZF压缩算法,默认为yes

    rdbchecksum

    存储快照时采用CRC64算法进行数据校验,默认为yes

    dbfilename&dir

    存储文件名,默认为dump.rdb;文件夹,默认为./

    Redis.conf 之 APPEND ONLY MODE

    appendonly

    是否开启aof,默认为no

    appendfilename

    appendfsync

    aof策略,默认为everysec。可选always、everysec、no

    no: don't fsync, just let the OS flush the data when it wants. Faster.
    always: fsync after every write to the append only log . Slow, Safest.
    everysec: fsync only one time every second. Compromise.

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

    aof文件重写相关配置,默认配置为100、64mb

    no-appendfsync-on-rewrite

    重写是是否允许appendfsync,默认为no,可以保证数据安全性

  • 相关阅读:
    apache phoenix查询缓慢问题
    hbase replication原理分析
    ServerSocketChannel实现多Selector高并发server
    hbase hmaster故障分析及解决方案:Timedout 300000ms waiting for namespace table to be assigned
    mapreduce出现类似死锁情况
    【转】How-to: Enable User Authentication and Authorization in Apache HBase
    最近的一些杂念思考
    我究竟该成为什么样的一个人
    解决linux下 使用netcore生成图片报错的问题:The type initializer for 'Gdip' threw an exception
    linux 编译安装nginx
  • 原文地址:https://www.cnblogs.com/2511zzZ/p/13065187.html
Copyright © 2020-2023  润新知