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

    Redis持久化

    持久化是为了数据重用或者防止系统崩溃后数据丢失,甚至就是保存计算后的结果方便使用等。redis支持两种方式来进行持久化将数据写入磁盘,分别是 快照以及aof。

    1.快照

    • 什么是快照

      快照就是获取存储在内存中的数据在某个时间点的副本,在创建快照后,用户可以对快照进行备份,可以将快照放到其余服务器上进行恢复数据或者创建数据,还可以放在本地,方便系统重启后恢复数据

    • 如何触发快照

      1. 通过redis.conf配置文件中配置 save 触发选项来触发,第二个参数表示多长时间,以秒为单位,第三个参数是写入次数,例如 save 60 10000 意思是 在60秒内写入了10000次就会触发 快照,如果设置了多个save,则只要满足其中要给条件都会创建一个快照

      2. 在redis客户端执行 bgsave 命令,服务器在接收到该命令后不会阻塞客户端的请求,会fork一个子进程来对数据进行备份

      3. 在redis客户端执行 save命令,服务器在接收到该命令后会停止接收客户端请求,知道备份完成后才会继续接收客户端请求,一般该方法使用不多,在服务器内存不够用的情况下,执行save命令

      4. 在使用shutdown等命令后,服务端会立即使用 save命令模式,不再接受任何而客户端请求,等待备份完成后关系服务器

      5. 当有两台服务器,其中一台服务器连接另一个服务器,并发送了一个 sync同步命令后,那么主服务器会执行 bgsave模式

    • 快照的优处

      1. 通过快照的方式可以生成多个储存文件,将这些文件放到别的服务器上可以快速恢复数据。
      2. 生成快照占用io资源少,不用频繁写操作,只用fork一个子线程操作即可。
      3. 相对于aof方式来说,直接基于快照的方式恢复和重启redis进程更加快速。
    • 快照的劣势

      1. 快照默认是根据某个时间段写入频率来触发创建,这意味着如果在创建一个快照后,还没有到下一次快照创建前,写入了假如20个key,redis服务器异常断开,那么这段时间内的 20个key 数据将会全部丢失,不能保证数据完整性。
      2. 当快照文件比较大以后,每次创建新的快照,会导致对客户端的服务暂停数毫秒,甚至数秒。

    2.AOF

    • 什么是AOF

      aof是将redis的写操作以日志记录的形式追加到 aof文件中保存,每次有写操作,都会向该文件追加,因此,redis重启或恢复数据都是将aof中的记录的命令重新全部执行一次达到恢复数据的目的

    • 如何开启aof

      1. 配置 appendonly yes 来开启
      2. 通过配置 appendsync 选项来 决定同步频率, appendsync 对应有三个选项
        1. always:每个redis写命令都是记录追加到aof文件,这样会严重降低redis的速度
        2. everysec:每秒执行一次同步,显式的将多个写命令同步到硬盘
        3. no:让操作系统来决定应该何时进行同步
    • AOF的优处

      1. 一般配置每秒进行写入同步,这样可以很好的数据的完整性,最多只会丢失一秒的数据
      2. aof日志文件以appendonly模式写入,所有没有任何磁盘寻址的开销,可以很快找到文件并写入文件,而且文件不容易破损,且还可以修复
      3. 当aof文件过大的时候,可能会出现后台重写操作,也不会影响客户端的使用,在创建新的日志文件时候,会将老文件压缩,提取恢复数据的最小日志出来。
    • AOF的劣势

      1. 针对快照来说,aof文件相对要大得多
      2. 每秒写入文件,性能相对快照而言相对会降低,但还是很快
      3. 以前AOF出现bug,就是通过aof日志恢复数据,没有恢复的一摸一样,所以相对快照这种稳定的恢复数据方式来说更加脆弱一点。

    3.如何抉择

    1. 不要只用快照,因为这样可能会导致丢失很多数据
    2. 不要只用aof,因为使用aof做冷备没有使用快照做冷备恢复数据来的快,并且没有快照稳定
    3. 因此,最好两者都使用。使用aof保证数据不丢失,作为恢复数据的第一选择。用快照用不同程度的冷备,在aof文件丢失或者损坏的情况下还可以使用快照进行恢复。
  • 相关阅读:
    ASP.NET 生命周期(原文翻译)
    JSON 小记
    Unity5-ABSystem(二):AssetBundle导出
    Unity5-ABSystem(一):AssetBundle原理
    《Unity 3D游戏客户端基础框架》概述
    Unity中的资源管理
    Unity中的优化技术
    深入浅出聊Unity3D项目优化:从Draw Calls到GC
    Incremental builds for IL2CPP
    Unity3D图像后处理特效——Depth of Field 3.4
  • 原文地址:https://www.cnblogs.com/duguxiaobiao/p/9153390.html
Copyright © 2011-2022 走看看