美文网首页
Redis 功能入门大全和基于scala实现示例(3) -- 持

Redis 功能入门大全和基于scala实现示例(3) -- 持

作者: 小赵营 | 来源:发表于2019-03-18 19:01 被阅读0次
    redis-scala.PNG

    概要

    • Redis server 基于5.0.0的stable版本
    • Client基于 Jedis 2.9.0
    • Scala 基于 2.11.X

    在系列的文章完成后,我们会了解redis的基本功能,实现scala语言对redis进行基本操作。
    本文侧重理论是redis数据保存策略的重要环节。实战中,性能调优很多基于这些参数进行。

    本文内容提要:

    • redis 数据持久化策略
    • redis持久化配置方式

    数据持久化

    redis是内存型数据库,也是作为缓存使用重要原因。数据存储在内存中,一个致命的缺陷是:如果服务器出现重启、宕机,数据不可恢复。持久化机制因数据恢复功能而存在。Redis服务重启后,从持久化的文件中加载数据。Redis支持2种数据持久化模式, RDB(Redis DataBase)AOF(append only file)。持久化方式分别介绍配置、基本操作流程特点。

    Redis服务支持2种持久化模式同时开启。同时开启时,重启服务默认加载AOF持久化的数据,原因后面会提到。

    无论那种模式都使用fork函数开始子进程,进而开启持久化流程。另外,持久化过程中,若发生硬盘Io问题,都会导致阻塞。

    1. RDB
    • RDB配置

      # save <seconds> <changes>

      save 900 1 #900秒内如果超过1个key被修改,则保存

      save 300 10 #900秒内如果超过10个key被修改,则保存
      save 60 10000 #60秒内如果超过10000 个key被修改,则保存

      stop-writes-on-bgsave-error yes #bgsave发生错误是否停止写入

      rdbcompression yes #是否使用 LZF 压缩数据,减少文件大小

      rdbchecksum yes #是否进行CRC64校验,开启会损失 10%性能

      dbfilename dump.rdb #保存文件名称 dump.rdb

      dir "/home/data/" #数据保存目录

    • RDB工作流程

      RDB通常指的是快照式数据存储,也支持手动触发数据存储。持久化实现逻辑:

      • 满足保存条件时, redis调用系统函数fork() ,创建一个子进程。
      • 子进程将数据集写入到一个临时 RDB 文件中。
      • 当子进程完成对临时RDB文件的写入时,redis 用新的临时RDB 文件替换原来的RDB 文件,并删除旧 RDB 文件。

      RDB持久化数据保存的是fork时间点的服务的数据,在进行RDB操作时,Redis服务是阻塞状态的。对服务响应实时性要求很高,一般不使用RDB持久化。

      持久化用临时替代旧文件,保证了即使在写入失败时,依然有一份完整的数据可供恢复。

    • RDB缺点

      • RDB周期性持久化,不适合实时性要求,可能存在数据丢失。
    2. AOF
    • AOF 配置

      appendonly no #开启AOF模式

      appendfilename "appendonly.aof" #保存的文件名

      # 数据写的方式

      # appendfsync always

      appendfsync everysec

      # appendfsync no

      no-appendfsync-on-rewrite no #重写配置

      auto-aof-rewrite-percentage 100
      auto-aof-rewrite-min-size 64mb

      aof-load-truncated yes

      aof-use-rdb-preamble yes

    • AOF 工作流程

      AOF模式包括几个步骤: 命令写入、文件同步、文件重写、重启加载(在数据恢复时使用)。

      • 所有写入命令会追加到缓冲区中
      • AOF缓冲区根据对应的策略向硬盘做同步操作(见配置参数中同步策略)。
      • 定期对AOF文件进行重写(重写也是通过fork子进程生成新的AOF文件)。
    • AOF 优缺点

      • 更高的数据安全性。Redis中提供了3中同步策略,即每秒同步、每修改同步和不同步。事实上,每秒同步也是异步完成的,其效率也是非常高的,所差的是一旦系统出现宕机现象,那么这一秒钟之内修改的数据将会丢失。而每修改同步,我们可以将其视为同步持久化,即每次发生的数据变化都会被立即记录到磁盘中。
      • 容灾。由于该机制对日志文件的写入操作采用的是append模式,因此写入时出现宕机现象,也不会破坏日志文件中已经存在的内容。然而如果写入了一半数据就出现了系统崩溃问题,在Redis下一次启动之前,我们可以通过redis-check-aof工具来帮助我们解决数据一致性的问题。
      • 自动重写。如果日志过大,Redis可以自动启用rewrite机制。即Redis以append模式不断的将修改数据写入到老的磁盘文件中,同时Redis还会创建一个新的文件用于记录此期间有哪些修改命令被执行。因此在进行rewrite切换时可以更好的保证数据安全性。
      • 持久化文件占用大存储空间。相同场景下,RDB重启恢复时间要快于AOF模式。

      2种持久化模式都开启时,默认使用AOF数据是由其更高的数据安全性决定的。


    往期传送门:

    Redis 功能入门大全和基于scala的应用实现(1)
    Redis 功能入门大全和基于scala的应用实现(2)
    Redis 功能入门大全和基于scala实现示例(3) -- 持久化

    据说,点赞会让女变美,男变靓。年终奖上涨非常浪,O(∩_∩)O~

    相关文章

      网友评论

          本文标题:Redis 功能入门大全和基于scala实现示例(3) -- 持

          本文链接:https://www.haomeiwen.com/subject/eyxopqtx.html