1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-06-16 18:10:13 +08:00
This commit is contained in:
TommyMerlin 2021-06-22 11:27:26 +08:00
parent a7a2225f07
commit ae0f4f0c4c

View File

@ -7,7 +7,7 @@
**很多时候我们需要持久化数据也就是将内存中的数据写入到硬盘里面,大部分原因是为了之后重用数据(比如重启机器、机器故障之后回复数据),或者是为了防止系统故障而将数据备份到一个远程位置。** **很多时候我们需要持久化数据也就是将内存中的数据写入到硬盘里面,大部分原因是为了之后重用数据(比如重启机器、机器故障之后回复数据),或者是为了防止系统故障而将数据备份到一个远程位置。**
Redis不同于Memcached的很重一点就是**Redis支持持久化**而且支持两种不同的持久化操作。Redis的一种持久化方式叫**快照snapshottingRDB**,另一种方式是**只追加文件append-only file,AOF**.这两种方法各有千秋,下面我会详细这两种持久化方法是什么,怎么用,如何选择适合自己的持久化方法。 Redis不同于Memcached的很重一点就是,**Redis支持持久化**而且支持两种不同的持久化操作。Redis的一种持久化方式叫**快照snapshottingRDB**,另一种方式是**只追加文件append-only file,AOF**。这两种方法各有千秋,下面我会详细这两种持久化方法是什么,怎么用,如何选择适合自己的持久化方法。
## 快照snapshotting持久化 ## 快照snapshotting持久化
@ -16,8 +16,8 @@ Redis可以通过创建快照来获得存储在内存里面的数据在某个时
![春夏秋冬又一春](https://user-gold-cdn.xitu.io/2018/6/13/163f97568281782a?w=600&h=329&f=jpeg&s=88616) ![春夏秋冬又一春](https://user-gold-cdn.xitu.io/2018/6/13/163f97568281782a?w=600&h=329&f=jpeg&s=88616)
**快照持久化是Redis默认采用的持久化方式**在redis.conf配置文件中默认有此下配置 **快照持久化是Redis默认采用的持久化方式**在redis.conf配置文件中默认有此下配置
```
```
save 900 1 #在900秒(15分钟)之后如果至少有1个key发生变化Redis就会自动触发BGSAVE命令创建快照。 save 900 1 #在900秒(15分钟)之后如果至少有1个key发生变化Redis就会自动触发BGSAVE命令创建快照。
save 300 10 #在300秒(5分钟)之后如果至少有10个key发生变化Redis就会自动触发BGSAVE命令创建快照。 save 300 10 #在300秒(5分钟)之后如果至少有10个key发生变化Redis就会自动触发BGSAVE命令创建快照。
@ -39,8 +39,6 @@ save 60 10000 #在60秒(1分钟)之后如果至少有10000个key发生
如果系统真的发生崩溃用户将丢失最近一次生成快照之后更改的所有数据。因此快照持久化只适用于即使丢失一部分数据也不会造成一些大问题的应用程序。不能接受这个缺点的话可以考虑AOF持久化。 如果系统真的发生崩溃用户将丢失最近一次生成快照之后更改的所有数据。因此快照持久化只适用于即使丢失一部分数据也不会造成一些大问题的应用程序。不能接受这个缺点的话可以考虑AOF持久化。
## **AOFappend-only file持久化** ## **AOFappend-only file持久化**
与快照持久化相比AOF持久化 的实时性更好因此已成为主流的持久化方案。默认情况下Redis没有开启AOFappend only file方式的持久化可以通过appendonly参数开启 与快照持久化相比AOF持久化 的实时性更好因此已成为主流的持久化方案。默认情况下Redis没有开启AOFappend only file方式的持久化可以通过appendonly参数开启
@ -55,7 +53,6 @@ appendonly yes
**在Redis的配置文件中存在三种同步方式它们分别是** **在Redis的配置文件中存在三种同步方式它们分别是**
``` ```
appendfsync always #每次有数据修改发生时都会写入AOF文件,这样会严重降低Redis的速度 appendfsync always #每次有数据修改发生时都会写入AOF文件,这样会严重降低Redis的速度
appendfsync everysec #每秒钟同步一次,显示地将多个写命令同步到硬盘 appendfsync everysec #每秒钟同步一次,显示地将多个写命令同步到硬盘
appendfsync no #让操作系统决定何时进行同步 appendfsync no #让操作系统决定何时进行同步
@ -65,7 +62,6 @@ appendfsync no #让操作系统决定何时进行同步
为了兼顾数据和写入性能,用户可以考虑 **appendfsync everysec选项** 让Redis每秒同步一次AOF文件Redis性能几乎没受到任何影响。而且这样即使出现系统崩溃用户最多只会丢失一秒之内产生的数据。当硬盘忙于执行写入操作的时候Redis还会优雅的放慢自己的速度以便适应硬盘的最大写入速度。 为了兼顾数据和写入性能,用户可以考虑 **appendfsync everysec选项** 让Redis每秒同步一次AOF文件Redis性能几乎没受到任何影响。而且这样即使出现系统崩溃用户最多只会丢失一秒之内产生的数据。当硬盘忙于执行写入操作的时候Redis还会优雅的放慢自己的速度以便适应硬盘的最大写入速度。
**appendfsync no** 选项一般不推荐这种方案会使Redis丢失不定量的数据而且如果用户的硬盘处理写入操作的速度不够的话那么当缓冲区被等待写入的数据填满时Redis的写入操作将被阻塞这会导致Redis的请求速度变慢。 **appendfsync no** 选项一般不推荐这种方案会使Redis丢失不定量的数据而且如果用户的硬盘处理写入操作的速度不够的话那么当缓冲区被等待写入的数据填满时Redis的写入操作将被阻塞这会导致Redis的请求速度变慢。
**虽然AOF持久化非常灵活地提供了多种不同的选项来满足不同应用程序对数据安全的不同要求但AOF持久化也有缺陷——AOF文件的体积太大。** **虽然AOF持久化非常灵活地提供了多种不同的选项来满足不同应用程序对数据安全的不同要求但AOF持久化也有缺陷——AOF文件的体积太大。**
@ -100,7 +96,7 @@ auto-aof-rewrite-min-size 64mb
无论是AOF持久化还是快照持久化将数据持久化到硬盘上都是非常有必要的但除了进行持久化外用户还必须对持久化得到的文件进行备份最好是备份到不同的地方这样才能尽量避免数据丢失事故发生。如果条件允许的话最好能将快照文件和重新重写的AOF文件备份到不同的服务器上面。 无论是AOF持久化还是快照持久化将数据持久化到硬盘上都是非常有必要的但除了进行持久化外用户还必须对持久化得到的文件进行备份最好是备份到不同的地方这样才能尽量避免数据丢失事故发生。如果条件允许的话最好能将快照文件和重新重写的AOF文件备份到不同的服务器上面。
随着负载量的上升,或者数据的完整性变得 越来越重要时,用户可能需要使用到复制特性。 随着负载量的上升,或者数据的完整性变得越来越重要时,用户可能需要使用到复制特性。
## Redis 4.0 对于持久化机制的优化 ## Redis 4.0 对于持久化机制的优化
Redis 4.0 开始支持 RDB 和 AOF 的混合持久化(默认关闭,可以通过配置项 `aof-use-rdb-preamble` 开启)。 Redis 4.0 开始支持 RDB 和 AOF 的混合持久化(默认关闭,可以通过配置项 `aof-use-rdb-preamble` 开启)。
@ -113,4 +109,3 @@ Redis 4.0 开始支持 RDB 和 AOF 的混合持久化(默认关闭,可以通
[深入学习Redis2持久化](https://www.cnblogs.com/kismetv/p/9137897.html) [深入学习Redis2持久化](https://www.cnblogs.com/kismetv/p/9137897.html)