Redis-持久化

Redis使用快照和AOF日志实现数据持久化,避免宕机导致数据丢失。快照是全量备份,AOF记录修改指令。AOF策略包括即时、每秒同步和仅在指令时同步。混合持久化结合两者优点,确保数据安全与恢复速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Redis持久化

Redis的数据全部在内存里,假如遇到宕机的情况,数据就会全部丢失,所以采用一种持久化的方式将数据写入到磁盘中。
Redis的持久化共有两种,第一种是快照的方式,第二种是AOF日志。
两者的区别是,快照是全量存储,AOF是连续的增量备份,快照是内存数据的二进制序列化形式,AOF是内存数据的修改逻辑指令文件

原理

Redis为单线程程序,这个线程需要负责客户端的数据查询等操作,如果在一个线程中,既要完成数据存取、又要完成io操作,会严重拖垮服务器的性能,如果变读写边持久化,可能会出现数据冲突,所以Redis的持久化采用了copy on write进行,主进程fork出来一个子进程进行数据的持久化。

cow

Copy on Write
原理:
1. 父进程fork出来的子进程与父进程共享内存空间,内存空间中的数据并不会马上复制给子进程。
2. fork()之后,kernel把父进程中所有的内存页的权限都设为read-only,然后子进程的地址空间指向父进程。当父子进程都只读内存时,相安无事。当其中某个进程写内存时,CPU硬件检测到内存页是read-only的,于是触发页异常中断,kernel就会把触发的异常的页复制一份,于是父子进程各自持有独立的一份。

AOF

AOF日志存储的是redis服务器的顺序指令序列,AOF日志只对内存进行修改的指令记录。
通过顺序执行AOF的方式,来对redis内存操作进行重现,从而达到数据恢复的目的。
AOF日志不遵循日志先行的规则,所以这一点上,Redis并不适合做DB去进行存储。
AOF写入策略分为三种,一:redis每隔1s调用系统的fsync操作进行写入,二:让操作系统判断何时,三:每次来一个指令就调用一次fsync,通常redis采用的是第一种,在效率与安全性上做了一个折中。

混合持久化

redis采用混合持久化,因为在RDB(快照)的时候,会存在子进程正在持久化的数据父进程刚好改了,会存在数据丢失的问题,所以在回复的时候,可以采用RDB的快速恢复+AOF的增量恢复。AOF只保留子持久化开始到持久化结束这个时间段的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值