REDIS - 持久化(二)

本文详细介绍了Redis的两种持久化方案——RDB和AOF。RDB通过定期创建内存快照实现数据备份,适用于大规模数据恢复;AOF则记录每次写操作,保证数据完整性,支持多种同步策略。在Redis重启时,AOF通常优先用于数据恢复。了解这两种持久化方式有助于优化Redis的数据安全与性能平衡。
摘要由CSDN通过智能技术生成

本文首发于我的个人网站:http://riun.xyz/


本文介绍了redis的数据持久化方案,即数据如何在重启服务后仍能获取到。

以下基于redis-6.2.1版本,系统为centos7 64位

官方文档:http://www.redis.cn/documentation.html

0、what

redis持久化是指将存在内存中的数据持久化到本地文件系统中。为什么需要这样做?当redis服务端关闭时,数据不能丢失(不要问为什么不能丢失),下次启动redis时要恢复上次内存中的数据。这就需要将内存中数据持久化到硬盘里。

持久化有几个主要的点:

1、如何持久化?即以何种方式将内存数据存入硬盘中。

2、多长时间进行一次持久化?进行一次持久化就将内存数据往硬盘里写一次,那多久这样持久化一次呢?太频繁了一定会对主服务造成影响;间隔时间太长又有可能漏掉数据(下次持久化还没进行时redis服务停掉了,那么上次持久化到停掉服务这段时间内存中“写”的数据就无法正常更新到硬盘)。

redis目前有两种持久化方案:RDB、AOF。

1、Redis持久化之RDB

RDB:Redis DataBase

如何做:在指定时间间隔内将内存中的数据快照写入磁盘;恢复时将快照文件直接读到内存中。

备份如何执行:redis单独创建(fork)一个子进程进行持久化。先将内存中的全部数据(redis服务中的数据)写入一个临时文件(在本地硬盘上)中;等写完后,再用这个临时文件替换上次持久化时保存好的文件。在大规模数据恢复,对数据恢复完整性不敏感的场景下,RDB更加高效适用。其缺点是最后一次持久化后的数据可能丢失

由于是将内存->硬盘这样数据写入,所以写入过程中不接受任何IO操作,即redis服务不再提供任何其他服务。这就确保了极高的性能。

fork是复制一个和当前进程一样的进程,新进程作为原进程的子进程,且所有数据与原进程一致

生成的持久化文件名称默认为:dump.rdb,默认保存在redis启动时所在目录下(就是在哪启动,文件就保存在哪个路径)。

fErnoD.md.jpg

2、Redis持久化之AOF

默认是关闭的

AOF:Append Only File

以日志形式增量记录每个写操作(读操作不记录;只追加文件,不会修改记录过的日志)。redis启动时就读取该文件重新构建数据(根据日志文件将写指令从前到后执行一遍完成数据恢复工作)。

持久化过程:

1、客户端的请求写命令会被追加到AOF缓冲区

2、AOF缓冲区根据AOF持久化策略,将操作sync同步到磁盘的AOF文件

3、AOF文件大小超过重写策略或手动重写时,会对AOF文件重写rewrite,压缩AOF文件容量。

4、Redis服务重启时,会重新加载AOF文件中的写操作,完成数据恢复。

AOF持久化策略:

  • always(每次redis写命令执行都会立刻记入日志、性能较差数据完整性较好)
  • everysec(每秒记入日志一次,宕机时本秒的数据可能丢失)
  • no(不主动同步,把同步时机交给操作系统???什么意思)

AOF默认不开启,在redis.conf配置文件中默认配置为:

  • appendonly no

  • appendfilename “appendonly.aof”

  • appendfsync everysec

    保存路径和RDB保存路径一致。

AOF和RDB同时开启,redis默认取AOF的数据(因为数据不会存在丢失)。

AOF和RDB备份机制和性能不同,但备份恢复操作一样,都是拷贝备份文件,需要恢复数据时拷贝到Redis工作目录下,启动时加载备份文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值