关于Redis持久化的深入探究
作者:一天睡20个小时
Redis持久化
官网地址:Redis persistence | Redis
Redis持久化是将内存中的数据保存到磁盘,以防止数据丢失。Redis提供了两种持久化方式:RDB和AOF。
1、为什么需要持久化?
reids是内存数据库,内存一断电或者宕机数据就消失了没有了,需要redis中的数据长期持有,它重启宕机恢复过来之后还是能从磁盘读回之前的数据
使用RDB(Redis Database)或者AOF(Append Only File)还可以RDB和AOF混合使用将数据写入磁盘
2、RDB(Redis Database)
2.1 官网介绍
RDB(Redis 数据库):RDB 持久性以指定的时间间隔执行数据集的时间点快照
2.2 什么是RDB
RDB持久化方式将Redis服务器中某个时间点的所有键值对集合写入一个快照文件。这个快照文件可以在Redis发生宕机时用于数据恢复。
RDB持久化方式的优点是在恢复数据时速度较快,缺点是如果Redis服务器宕机时未保存快照文件,会丢失部分数据。
为了解决这个问题,可以使用自动备份机制和设置持久化时间来进行保护。在Redis.conf文件中可以设置save参数,表示在多长时间内,至少有n个key发生变化时,就会启动一次自动备份。同时也可以设置备份目录和备份文件名,定期备份Redis中的数据,建议每天进行一次。
2.3 操作步骤
按照redis.conf里配置文件的save
5秒钟修改两次
433 # save 3600 1 300 100 60 10000 434 save 5 2
修改dump文件保存路径
自定义路径的文件不能为空,得提前去创建好
- 自定义路径
3、AOF(Append Only File)
3.1 什么是AOF?
以日志的形式来记录每一个写操作,将redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作
默认情况下,redis是没有开启AOF(append only file)的。开启AOF功能需要设置配置:appendonly yes
3.2 AOF持久化方式
AOF持久化方式是通过记录Redis执行过的写命令来恢复数据。当Redis服务器重启时,会通过执行AOF文件中的命令来恢复数据。AOF持久化方式相对于RDB持久化方式而言,可靠性更高,但磁盘消耗较大。
用户可以通过配置文件设置AOF文件的名称和同步方式等参数,有always、everysec和no三种同步策略可供选择。当使用always策略时,每次写操作完成后都会立即将数据同步到磁盘中;当使用everysec策略时,Redis会每秒钟同步一次到磁盘中;而使用no策略时,Redis会尽可能把同步写操作的负载分担到系统的后台写任务中去。
为了保证Redis的数据安全性,在使用AOF持久化方式时,可以选择使用Redis Sentinel来进行管理和监控。这样可以在主节点出现问题时,自动进行切换,保证Redis服务不受影响。
3.3 AOF能干嘛?
快照功能并不是非常耐久(dura ble): 如果 Redis 因为某些原因而造成故障停机, 那么服务器将丢失最近写入、且仍未保存到快照中的那些数据。 从 1.1 版本开始, Redis 增加了一种完全耐久的持久化方式: AOF 持久化。
你可以在配置文件中打开AOF方式:
appendonly yes
从现在开始, 每当 Redis 执行一个改变数据集的命令时(比如 SET), 这个命令就会被追加到 AOF 文件的末尾。这样的话, 当 Redis 重新启时, 程序就可以通过重新执行 AOF 文件中的命令来达到重建数据集的目的。
4、RDB-AOF混合持久化
你也可以同时开启两种持久化方式, 在这种情况下, 当redis重启的时候会优先载入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整
4.1 RDB 的优点和缺点
优点
- 对于大型数据集,RDB 恢复时的速度比 AOF 要快。
- RDB 文件可以作为备份数据库。
缺点
- 如果 Redis 发生故障,最后一次持久化之后的所有更改都会丢失。
- RDB 文件的大小可能比 AOF 文件大。
4.2 AOF 的优点和缺点
优点
- 对于小型数据集,AOF 恢复速度更快。
- AOF 文件保存了 Redis 数据库的完整操作记录,即使 Redis 发生故障,也可以尽可能地少丢失数据。
缺点
- AOF 文件通常比 RDB 文件更大。
- 恢复数据所需的时间可能比 RDB 更长。
4.3 数据恢复顺序和加载流程
在同时开开启rdb和aof持久化,重启是只会加载aof文件,不会加载rdb文件
4.4 同时开启两种持久化方式
在这种情况下,当redis重启的时候会优先载入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保存的数据集比RDB文件保存的数据集要完整
RDB的数据不实,同时使用两者是服务器重启也只会找AOF文件,那要不要只使用AOF呢?
作者建议不要,因为RDB跟适合用于备份数据库(AOF在不断变化不好备份),留着RDB作为一个万一的手段
4.5 推荐方式
RDB+AOF混合方式
结合了RDB和AOF的优点,既能快输加载又能避免丢失过多的数据
- 开启 RDB+AOF 的混合持久化方式。你可以通过设置
aof-use-rdb-preamble
来开启这种持久化方式。
aof-use-rdb-preamble yes
先使用RDB进行快照存储,然后使用AOF持久化记录所有写操作,当重写策略满足或手动触发重写的时候,将最新的数据存储为新的RDB记录。这样的话,重启服务器的时候会从RDB和AOF两部分恢复数据,既能保证数据完整性,又能提高恢复数据的性能
5、注意事项
在实际应用中,使用Redis持久化时需要注意以下问题:
- 定期备份:定期备份Redis中的数据。
- 备份机和生产机不能共存:为避免数据丢失,在备份机和生产机之间需要进行物理隔离。
- 恢复备份数据时需要重启Redis:使用RDB方式备份数据时,恢复备份数据需要重启Redis服务。而使用AOF方式备份数据时,恢复备份数据则需要将AOF文件导入到一个新的Redis实例中。在进行恢复操作时,需要特别小心,以避免损坏数据。
- 合理配置参数:合理设置最大连接数和最大数据包大小,以避免出现Redis性能瓶颈。可以通过修改Redis.conf文件来设置这些参数。
- 而使用AOF方式备份数据时,恢复备份数据则需要将AOF文件导入到一个新的Redis实例中。在进行恢复操作时,需要特别小心,以避免损坏数据。
- 合理配置参数:合理设置最大连接数和最大数据包大小,以避免出现Redis性能瓶颈。可以通过修改Redis.conf文件来设置这些参数。
以上就是关于Redis持久化的深入探究的详细内容,更多关于Redis持久化的资料请关注脚本之家其它相关文章!