REDIS - 持久化(二) 2021-08-22 19:51 本文介绍了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更加高效适用。其缺点是**最后一次持久化后的数据可能丢失**。 fork是复制一个和当前进程一样的进程,新进程作为原进程的**子进程**,且所有**数据**与原进程**一致**。 生成的持久化文件名称默认为:dump.rdb,默认保存在redis启动时所在目录下(就是在哪启动,文件就保存在哪个路径)。 ![fErnoD.md.jpg](http://minio.riun.xyz/riun1/2021-08-17_WGnOWf9oopuixD1YMO.jpg) 当redis停掉后再次启动时,redis就会自动加载rdb文件,将数据同步进内存。 ### 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工作目录下,启动时加载备份文件。 --END--
发表评论