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

    redis持久化策略以及对比

    持久化

    • 快照 RDB(Redis DataBase):数据完整的生成一个快照,以二进制的格式保存在硬盘上,后缀为.rdb
    • 写日志 AOF(Append only file):所有数据更新语句都记录在日志上(AOF重写)

    1.快照:对数据在某时某点的完整备份

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

    将数据完整的生成一个快照,以二进制的格式保存在硬盘上,后缀为.rdb。当需要进行恢复时,再从硬盘加载到内存中

    三种触发机制:

    1:save命令触发方式(同步):新生成的一个新的临时文件,当save执行完后,用新的替换老的

    2:bgsave命令触发方式(异步):与同步相同

    3:规则自动触发方式:当某些条件达到时,自动生成rdb文件

    2.写日志(aof)将数据更新语句都记录在日志里;

    以追加非方式记录redis操作日志的文件,可以最大程度的保证数据库的安全,类似于mysql的binlog

    三种触发条件:

    1:always:让缓冲区的数据及时刷新到硬盘中

    2:everysec:每秒刷新到硬盘,在高写入量下,可以保护硬盘,出现故障可能会丢掉一秒的数据

    3:no:不可控,在不知道啥时候刷新,也不知道丢多少数据

    由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功 能,将数据保存到磁盘上,当redis重启后,可以从磁盘中恢复数据。 redis提供两种方式进行持久化,一种是RDB持久化,另外一种是AOF持久化。
    

    1.RDB持久化

    #原理:
    RDB持久化是指在指定的时间间隔内将通过save命令将内存中的数据生成生成RDB快照文件 
    RDB文件是经过压缩的二进制文件,这个文件被保存在硬盘中,redis可以通过这个文件还原数据库当时的状态。
    #过程:
    Redis调用fork(),产生一个子进程。子进程把数据写到一个临时的RDB文件。当子进程写完新的RDB文件后,把旧 的RDB文件替换掉
    #优点:
    RDB文件是一个很简洁的单文件,它保存了某个时间点的Redis数据,很适合用于做备份。你可以设定一个时间点对 RDB文件进行归档,这样就能在需要的时候很轻易的把数据恢复到不同的版本。比起AOF,在数据量比较大的情况下, RDB的启动速度更快。 
    #缺点 :
    RDB容易造成数据的丢失。假设每5分钟保存一次快照,如果Redis因为某些原因不能正常工作,那么从上次产生快照 到Redis出现问题这段时间的数据就会丢失了。RDB使用fork()产生子进程进行数据的持久化,如果数据比较大的话 可能就会花费点时间,造成Redis停止服务几毫秒。如果数据量很大且CPU性能不是很好的时候,停止服务的时间甚 至 会到1秒。
    

    2.AOF持久化

    #原理: 
    AOF持久化以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,生成AOF文件,重启Redis 时,AOF里的命令会被重新执行一次,重建数据。
    #过程:
    Redis调用fork(),产生一个子进程。子进程把新的AOF写到一个临时文件里。主进程持续把新的变动写到内存里的 buffer,同时也会把这些新的变动写到旧的AOF里,这样即使重写失败也能保证数据的安全。当子进程完成文件 的 重写后,主进程会获得一个信号,然后把内存里的buffer追加到子进程生成的那个新AOF里 
    #优点:
    比RDB可靠。你可以制定不同的fsync策略:不进行fsync、每秒fsync一次和每次查询进行fsync。默认是每秒 fsync一次。这意味着你最多丢失一秒钟的数据。 
    #缺点:
    在相同的数据集下,AOF文件的大小一般会比RDB文件大。 日志重写:新文件上会写入能重建当前数据集的最小操作命令的集合。
    

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

    aof:以追加的方式记录redis操作日志的文件。可以最大程度的保证redis数据安全,类似于mysql的binlog

  • 相关阅读:
    windows下启动数据库、创建数据表、角色等
    直播流的来源
    win10如何查看已保存的账号信息
    Tomcat+IDEA
    线程安全-Spring Bean 作用域类型(Scope)
    ECMAScript6学习-2.1let与const
    解决Mac上Android开发时adb连接不到手机问题
    8个不可不知的Mac OS X专用命令行工具(转)
    ios 中获得应用程序名称和版本号
    iPhone 6 图像渲染揭秘(转)
  • 原文地址:https://www.cnblogs.com/zhuyuanying123--/p/12493917.html
Copyright © 2011-2022 走看看