zoukankan      html  css  js  c++  java
  • Redis持久化

    @


    Redis有两种持久化方式

    RDB和AOF

    RDB是快照方式,是⼀次全量备份;AOF是命令日志方式,连续的增量备份。redis默认采用RDB持久化方式

    RDB

    Snapshot 快照,在指定的时间间隔内将内存中的数据集快照写入磁盘,恢复时是将快照文件直接读到内存里

    配置

    指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合
    save
    Redis 默认配置文件中提供了三个条件
    save 900 1 【表示 900秒(15分钟)内有1个更改】
    save 300 10【表示 300秒(5分钟)内有10个更改】
    save 60 10000【表示 60秒(1分钟)内有10000个更改】

    如果同时满足以上三个默认的条件 redis 就是自动缓存数据到 dump.rdb 这个文件中,此条件可以修改

    原理

    forkcow。fork 是指 redis间隔一段时间会 fork 一个子进程,子线程将数据写到磁盘上一个临时RDB文件中,当子进程写完临时文件后,将原来的RDB替换掉,这样的好处是可以 cow(copy-on-wirte)。使用单独子进程来进行持久化,主进程不会进行任何IO操作,保证 redis 的高性能。

    优缺点

    优点:

    • 方便持久化,只有一个文件 dump.rdb
    • 容灾性好,一个文件可以保存到安全的磁盘中
    • 性能最大化,fork 子进程来完成写操作,让主进程继续处理命令,所以是IO最大化。

    缺点:

    • 数据安全性低,RDB是间隔一段时间来进行持久化,如果持久化之间 redis 发生故障,会发生数据丢失,所以这种方式更适合数据要求不严谨的时候用
    • 保存时间长,如果数据量很大,保存快照的时间会很长

    AOF

    AOF(Append-Only-File),是将 Redis 执行的每次写命令记录到单独的日志文件中,当重启 Redis 会重新将持久化的日志中文件恢复数据。保存的文件是appendonly.aof

    原理

    AOF ⽇志存储的是 Redis 服务器的顺序指令序列,AOF ⽇志只记录对内存进⾏修改的指令记录。

    AOF ⽇志是以⽂件的形式存在的,当程序对 AOF ⽇志⽂件进⾏写操 作时,实际上是将内容写到了内核为⽂件描述符分配的⼀个内存缓存 中,然后内核会异步将数据刷写到磁盘。

    Linux 提供了fsync(int fd)函数可以将指定⽂件的内容强制从内核缓存刷到磁盘。只要 Redis 进程实时调⽤ fsync 函数就可以保证 aof ⽇志不丢失。但是 fsync 是⼀个磁盘 IO 操作,它很慢!如果 Redis 执⾏⼀条指令就要 fsync ⼀次,那么 Redis ⾼性能的地位就不保了。

    所以在⽣产环境的服务器中,Redis 通常是每隔 1s 左右执⾏⼀次 fsync 操作,周期 1s 是可以配置的。这是在数据安全性和性能之间 做了⼀个折中,在保持⾼性能的同时,尽可能使得数据少丢失。

    优缺点

    优点:

    • 数据安全,AOF 持久化可以配置 appendfsync 属性中的always,每进行一次写命令操作就记录到 AOF 文件中一次
    • 一致性,通过 append 模式写文件,即使中途服务器宕机,可以通过 redis-check-aof 工具解决数据一致性问题

    缺点:

    • AOF 文件比RDB文件大,而且恢复速度慢
    • 数据集大的时候比 RDB 启动效率低

    两者比较

    • AOF 文件比 RDB 更新频率高,优先使用 AOF 还原数据
    • AOF 比 RDB 更安全也更强大
    • RDB 性能比 AOF 好
    • 如果两个都配了优先加载 AOF

    Redis 4.0 混合持久化

    重启Redis时,我们很少使⽤rdb来恢复内存状态,因为会丢失⼤量数据。我们通常使⽤AOF⽇志重放,但是重放AOF⽇志性能相对rdb来说要慢很多,这样在Redis实例很⼤的情况下,启动需要花费很⻓的时间。

    Redis4.0之后——混合持久化。将rdb⽂件的内容和增量的AOF⽇志⽂件存在⼀起。新的AOF文件前半段是RDB格式的全量数据后半段是AOF格式的增量数据。

    在Redis重启的时候,可以先加载rdb的内容,然后再重放增量AOF⽇志就可以完全替代之前的AOF全量⽂件重放,重启效率因此⼤幅得到提升。

    数据恢复

    开启了混合持久化时,启动redis依然优先加载aof文件,aof文件加载可能有两种情况:

    • aof文件开头是rdb的格式, 先加载 rdb内容再加载剩余的 aof。
    • aof文件开头不是rdb的格式,直接以aof格式加载整个文件。
  • 相关阅读:
    dropdownlist下拉框加--请选择---
    vs2012中自带IIS如何让其他电脑访问
    win7 web开发遇到的问题-由于权限不足而无法读取配置文件,无法访问请求的页面
    无法打开登录所请求的数据库 "xxxx"。登录失败。 用户 'NT AUTHORITYSYSTEM' 登录失败。
    如何实现删除确认
    如何获取GridView的总记录数?
    SQL两张表如何关联
    ES7学习笔记——Array.prototype.includes和求幂运算符**
    一些常用的JavaScript正则表达式
    Vue.js 2.x中事件总线(EvevntBus)及element-ui中全屏loading的使用
  • 原文地址:https://www.cnblogs.com/valjeanshaw/p/12836893.html
Copyright © 2011-2022 走看看