纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页IT学院IT技术

Redis持久化 Redis持久化深入详解

Tsing   2021-03-02 我要评论
想了解Redis持久化深入详解的相关内容吗Tsing在本文为您仔细讲解Redis持久化的相关知识和一些Code实例欢迎阅读和指正我们先划重点:redis持久化,redis特点下面大家一起来学习吧。

1、概述

Redis 是内存数据库如果不能将内存中的数据保存到磁盘中那么一旦服务器进程退出服务器的数据库数据也会消失所以Redis提供了持久化的功能,redis分为两种持久化方式:RDB和AOF。有以下几个特点:

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

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

3.如果你只希望你的数据在服务器运行的时候存在你也可以不使用任何持久化的方式。

4.你也可以同时开启两种持久化方式在这种情况下当redis重启的时候会优先载入AOF文件来恢复原始的数据。因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整。

2、RDB

1、概念

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

2、持久化机制-BGSAVE

通常会立即返回ok,Redis进程会执行fork操作创建子进程Redis在fork时父进程会继续为客户端提供服务子进程会将数据持久化到硬盘上然后退出。如果已经在后台执行保存或者正在运行另一个非后台保存的进程特别是正在进行AOF写入时则会返回错误。如果使用了bgsave任务而正在进行AOF写入时该命令将立即返回ok,并计划在下一次机会运行后台保存。阻塞只会在fork阶段。
客户端可以使用lastsave命令检查操作是否成功。

3、持久化机制-SAVE

不会接受客户端执行的操作命令等持久化工作完成之后会将新的文件替换旧的文件。

4、持久化机制-自动触发

redis.conf中可以配置让用户自定义save属性让服务器每一段时间内执行一次bgsave操作。

# 服务器在900秒内对数据库进行了至少1次修改
save 900 1
 
# 服务器在300秒内对数据库进行了至少10次修改
save 300 10
 
# 服务器在60秒内对数据库进行了至少10000次修改
save 60 10000
 
# bgsave发生错误时是否停止写入一般为yes
stop-writes-on-bgsave-error yes
 
# 持久化时是否使用LZF压缩字符串对象?
rdbcompression yes
 
# 是否对rdb文件进行校验和检验通常为yes
rdbchecksum yes
 
# RDB持久化文件名
dbfilename dump.rdb
 
# 持久化文件存储目录
dir ./

5、恢复数据机制

只需要将rdb文件放在我们redis启动目录就可以了redis启动的时候会自动检查文件并恢复其中的数据。

6、优点

  • RDB是一个非常紧凑的文件它保存了某个时间点得数据集非常适用于数据集的备份比如你可以在每个小时报保存一下过去24小时内的数据同时每天保存过去30天的数据这样即使出了问题你也可以根据需求恢复到不同版本的数据集。
  • RDB是一个紧凑的单一文件很方便传送到另一个远端数据中心或者亚马逊的S3(可能加密)非常适用于灾难恢复。
  • RDB在保存RDB文件时父进程唯一需要做的就是fork出一个子进程接下来的工作全部由子进程来做父进程不需要再做其他IO操作所以RDB持久化方式可以最大化redis的性能。
  • 与AOF相比在恢复大的数据集的时候RDB方式会更快一些。

7、缺点

  • 如果你希望在redis意外停止工作(例如电源中断)的情况下丢失的数据最少的话那么RDB不适合你。虽然你可以配置不同的save时间点(例如每隔5分钟并且对数据集有100个写的操作)是Redis要完整的保存整个数据集是一个比较繁重的工作你通常会每隔5分钟或者更久做一次完整的保存万一在Redis意外宕机你可能会丢失几分钟的数据。
  • RDB 需要经常fork子进程来保存数据集到硬盘上当数据集比较大的时候fork的过程是非常耗时的可能会导致Redis在一些毫秒级内不能响应客户端的请求。如果数据集巨大并且CPU性能不是很好的情况下这种情况会持续1秒AOF也需要fork但是你可以调节重写日志文件的频率来提高数据集的耐久度。

3、AOF

1、概念

以日志的形式来记录每个写操作将Redis执行过的所有指令记录下来(读操作不记录)只许追加文件但不可以改写文件Redis启动之初会读取该文件重新构建数据换言之Redis重启的话就会根据日志文件的内容将写的指令从前到后执行一次以完成数据的恢复工作。

2、持久化原理

所有操作的命令会追加在文件中。

3、开启AOF持久化

# 开启aof持久化方式默认no
 appendonly no
 
# aof 持久化生成的文件名称
appendfilename "appendonly.aof"
 
# 三种持久化机制
# appendfsync always
appendfsync everysec
# appendfsync no

4、三种触发持久化机制

  • always

同步持久化每次发生数据变更会被立即持久化到硬盘中性能比较差但是数据完整性好。

  • everysec

异步操作每秒持久化数据到硬盘一次可能会丢失一秒的数据。

  • no

从不持久化到硬盘。

5、AOF文件损坏

如果 aof 文件被破坏redis服务是启动不了的。redis本身提供了修复了工具。redis-check-aof --fix appendonly.aof

5、优点

  • 根据配置不同的策略让你选择持久化的方式。
  • AOF文件是一个只进行追加的日志文件所以不需要写入seek即使由于某些原因(磁盘空间已满写的过程中宕机等等)未执行完整的写入命令你也也可使用redis-check-aof工具修复这些问题。
  • Redis 可以在 AOF 文件体积变得过大时自动地在后台对 AOF 进行重写: 重写后的新 AOF 文件包含了恢复当前数据集所需的最小命令集合。 整个重写操作是绝对安全的因为 Redis 在创建新 AOF 文件的过程中会继续将命令追加到现有的 AOF 文件里面即使重写过程中发生停机现有的 AOF 文件也不会丢失。 而一旦新 AOF 文件创建完毕Redis 就会从旧 AOF 文件切换到新 AOF 文件并开始对新 AOF 文件进行追加操作。
  • AOF 文件有序地保存了对数据库执行的所有写入操作这些写入操作以 Redis 协议的格式保存 因此 AOF 文件的内容非常容易被人读懂对文件进行分析(parse)也很轻松。导出(export)AOF文件也非常简单:举个例子 如果你不小心执行了 FLUSHALL 命令 但只要 AOF 文件未被重写那么只要停止服务器移除 AOF 文件末尾的 FLUSHALL 命令并重启 Redis就可以将数据集恢复到 FLUSHALL 执行之前的状态。

6、缺点

  • 对于相同的数据集来说AOF 文件的体积通常要大于 RDB 文件的体积。
  • 根据所使用的 fsync 策略AOF 的速度可能会慢于 RDB 。 在一般情况下 每秒 fsync 的性能依然非常高 而关闭 fsync 可以让 AOF 的速度和 RDB 一样快 即使在高负荷之下也是如此。 不过在处理巨大的写入载入时RDB 可以提供更有保证的最大延迟时间(latency)。

4、如何选择持久化机制

开启两种持久化方式根据自己的业务需求针对redis进行配置的调整。


相关文章

猜您喜欢

  • c# wpf双击编辑DataGrid c# WPF中通过双击编辑DataGrid中Cell的示例(附源码)

    想了解c# WPF中通过双击编辑DataGrid中Cell的示例(附源码)的相关内容吗Hello——寻梦者!在本文为您仔细讲解c# wpf双击编辑DataGrid的相关知识和一些Code实例欢迎阅读和指正我们先划重点:c#,wpf,c#,编辑DataGrid,c#,编辑Cell下面大家一起来学习吧。..
  • unity翻页效果 unity实现翻页效果

    想了解unity实现翻页效果的相关内容吗weixin_44462815在本文为您仔细讲解unity翻页效果的相关知识和一些Code实例欢迎阅读和指正我们先划重点:unity,翻页下面大家一起来学习吧。..

网友评论

Copyright 2020 www.Shellfishsoft.com 【贝软下载站】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式