Redis持久化方法有哪些
为什么需要持久化呢?
通常情况下redis的数据全部存储在内存中,数据库一旦故障发生重启数据会全部丢失,即使是在redis cluster或者redis sentinel模式下主从同步数据的恢复仍然需要一段时间。
持久化功能在于能够有效地避免因进程退出造成的数据丢失问题,在下次重启时利用之前持久化的文件即可实现数据恢复。
使用Redis持久化后,数据会被存储到磁盘上。在数据库执行增量同步时,所需的时间远远少于执行全量同步的时间。在生产环境下故障的数据恢复有着非常重要的作用!
Redis数据持久化有两种方案
Redis持久化有两种方案:
RDB是一种快照式的数据存储,它会周期性的保存当前时间点Redis所有的数据到磁盘中。
AOF是一种追加式的存储方式,会实时的记录Redis的写操作到磁盘中。
这两种方案又存在什么样的区别呢?下面让小编一一道来吧~
1. RDB持久化
当Redis的写入触发RDB持久化条件后(也可以手动执行dgsave命令来触发),Redis主进程fork一个子进程来创建临时RDB存储文件,创建文件完成后对这个临时文件rename替换原先的RDB文件。RDB文件是一个单文件很适合数据的容灾备份与恢复,通过RDB文件恢复数据库耗时较短,通常1G的快照文件载入内存只需20s左右。
缺点:
RDB持久化只会周期性的保存Redis数据,当还未触发下一次存储的情况下Redis宕机,则内存中的数据会全部丢失。
另外当数据量较大的情况下,fork子进程这个操作很消耗cpu,如下图的监控图,每1800s触发的RDB持久化,Redis消耗的cpu都会飙升。在fork子进程过程中可能会发生长达秒级别的阻塞情况。
参数:
save选项如果配置为空save "
"
,则关闭RDB持久化,这个开启RDB持久化触发条件可以配置多条,例如900秒内有1次写入触发快照/300秒内有10次写入触发快照,这个可以根据自身Redis写入情况自由配置来平衡性能与数据安全。
stop-writes-on-bgsave-error建议开启,当redis bgsave发生错误的时候拒绝客户端的请求,bgsave失败一般是磁盘或者内存空间不够,需要监控来提高数据安全性。
2. AOF持久化
AOF是通过保存Redis写操作的命令来实现持久化,使用AOF来持久化,Redis数据的安全性将大幅提高,异常宕机情况下最多丢失1s的数据。Redis的写操作被记录在AOF文件中,该文件的格式清晰易懂,可以轻松修改,从而方便地进行数据重建。
缺点:
随着redis写入的增加,AOF存储文件会越来越大,会影响到数据库数据的恢复时间和磁盘空间等,所以我们需要配置AOF重写来缩小AOF文件的体积,这里可使用默认的两个触发条件配置或者我们可以手动调用BGREWRITEAOF命令来触发。
参数:
appendonly设置是否开启AOF持久化。
appendfsync有三种持久化模式:always/everysec/no,兼顾数据存储的速度和安全性配置为everysec,每秒钟同步一次数据到磁盘中。
3. RDB、AOF持久化优劣势对比
两种方式各有千秋, 下面对比一下两种redis数据持久化方式:
4. 选择
Redis恢复数据时会先检查AOF文件是否存在,如果不存在就尝试加载RDB文件。
不同情况下,根据数据量、应用对数据安全的要求、预算限制等,实际生产环境中会采用各种不同的持久化策略。此句可重写为:可以选择不采用持久化方式,或选择使用单独的RDB或AOF持久化方式,也可以同时开启RDB和AOF持久化方式。
PS:持久化的选择必须与Redis的主从策略一起考虑,因为主从复制与持久化同样具有数据备份的功能,而且主机master和从机slave可以独立的选择持久化方案。
Redis是一种开源的NoSQL数据库,具有高效快速的数据存储和读取功能,同时,Redis还有很好的可扩展性和灵活性,因此被广泛应用于Web数据缓存、会话管理等方面。Redis的持久化方式有两种,分别为RDB和AOF,下面将分别介绍它们的优缺点以及如何选择。
RDB方式
RDB(Redis DataBase)是Redis默认的持久化方式,它的核心思想是将内存中的数据定期转存到磁盘上,形成一个时间点的快照文件。 RDB方式的优点在于:
1. 对系统性能影响小:RDB方式在进行持久化时,Redis会fork一个子进程,使用子进程进行持久化操作,这样可以避免持久化操作对原有系统造成的影响。
2. 保存数据完整性:RDB方式的持久化操作不会影响Redis的读写操作,同时由于快照文件包含了Redis在某个时间点的所有数据,因此可以保证Redis在恢复数据时数据的完整性。
3. 高效:RDB方式在进行持久化操作时不需要频繁地操作磁盘,因此持久化速度很快。
但是,RDB方式也有一些缺点,最明显的就是:
1. 数据可能会丢失:由于RDB方式是定时持久化,因此在Redis持久化的时间间隔内,如果系统出现了问题,例如机器停电,那么在最后一次快照文件生成和机器停电这段时间内的数据就会丢失。
2. 锁定持久化时间:由于RDB方式是定时持久化,因此系统中的所有数据最多只会在某个持久化周期内生成一次快照文件,而且这个生成快照文件的时间是无法随意设置的。
AOF方式
AOF(Append Only File)方式是另一种Redis可选的持久化方式,它的核心思想是将每次写操作记录下来,形成一个日志文件。AOF方式的优点在于:
1. 数据不易丢失:AOF将每次写操作都记录在日志文件中,因此即使在发生异常情况时,数据也不容易丢失。
2. 灵活,可设置持久化时间:AOF方式支持不同设置的持久化时间间隔,可以根据具体业务需求灵活调整持久化时间。
3. 以写为主,保证数据的完整性:每次Redis进行写操作时,都会记录到AOF中,这种方式保证了数据的完整性。
然而,AOF方式也有不足之处:
1. AOF文件较大:由于AOF文件记录的是每一次Redis写操作,因此AOF文件会随着Redis的操作不断增大,可能会导致磁盘空间的浪费。
2. 读写性能相对差:由于每一次Redis操作都需要写入日志文件,因此AOF方式对于Redis的写操作有一定的性能影响,但是对于读操作的影响相对小。
如何选择Redis持久化方式?
总的来说,RDB方式适合数据量较小,对数据的完整性要求不高的业务;而AOF方式适合对数据完整性要求较高,数据量较大的业务。当然,在实际应用中,可以根据业务需求对Redis的持久化方式进行优化,例如使用AOF和RDB方式的混合使用,达到更好的效果。
总结
Redis具有高效快速的数据存储和读取功能,同时,在持久化方面有RDB和AOF两种方式。RDB方式锁定持久化时间,但对系统性能影响小,且保存数据完整性。AOF方式要求较高,但保证数据不易丢失,读写性能相对差。在实际应用中,可以根据业务需要选择合适的方式,甚至进行方式的混合使用。