【后端面试基础】-【Redis篇】(三): Redis持久化

Redis区别于其他缓存数据库的一个优点就是支持持久化存储,将缓存数据存储到磁盘中,这样当Redis服务宕机重启后可以恢复数据,不需要重建缓存数据。

缓存存储和磁盘存储的区别

  1. 缓存存储是基于内存存储,速度快,服务器重启后会初始化,数据丢失
  2. 磁盘存储将数据以一定的格式存储到磁盘上,服务器重启后不会丢失,但是访问需要磁盘IO,相对于缓存来说速度慢。
  3. Redis中处理命令的线程是单线程,持久化操作使用其他线程,所以不用担心访问磁盘IO的性能问题。

Redis有两种持久化机制,分别为RDB和AOF,两种方式各有优劣,可根据不同的场景进行选择

RDB

RDB是一种快照模式,在某个时间点将当前redis的缓存数据作一次快照,整个保存到二进制文件中。

主动持久化

  • Save

执行Save命令会进行一次RDB持久化,不过这个过程会阻塞主线程,导致无法处理其他redis命令。

  • Bgsave

开启一个线程单独执行RDB持久化,不会阻塞主线程。

自动持久化

在配置文件中配置执行的间隔时间。

优缺点

  • 优点
    1. 文件体积小
    2. 奔溃后恢复速度快
  • 缺点
    1. 保存时间的间隔长,容易丢失过多的数据。(未保存到磁盘的数据在服务器宕机时会丢失)

AOF

原理

  • aof为追加模式,类似于binlog,将新增的数据,添加到文件末尾
  • 新的缓存数据添加到Redis时,不是直接写入到aof文件中,而是先将数据拷贝到一个aof缓冲区(缓存)中,然后每隔一段时间将aof缓存区的数据同步到文件中(添加到文件末尾),最短时间可设置为每隔1S同步持久化一次数据。
  • 当添加的aof文件过大时,redis会对aof文件进行重写,将过期无效的数据删除。

优缺点

  • 优点
    1. 同步频率高,根据原理可知,每隔1S就会持久化一次数据,那么最多丢失1S的数据。
  • 缺点
    1. 虽然有重写机制,但是aof文件相较于rdb文件还是大,而且崩溃后恢复的速度也慢。

混合持久化

RDB和AOF都各有优缺点,所以Redis采用混合持久化的方式来保存数据,即保证一定的加载速度,又尽可能的少丢失数据。

具体实现

  • aof和rdb格式同时存在,本质上是aof文件。
  • 数据被添加到aof缓冲区中,每隔1S同步到aof文件中。
  • 当数据慢慢变多,此时触发重写机制,将当前的数据以rdb格式进行保存,并添加到aof文件的开头,后续的数据还是以aof机制的形式添加,直到下一次重写。
  • 奔溃重启时,先加载rdb部分,再加载aof部分。

优点

  • 先加载rdb,再加载aof,这样恢复速度不至于太慢。
  • 缓冲区同步采用aof机制,同步频率高,丢失数据少。

介绍

我是烤鱼。目前是一名Golang开发者,使用过C++、Python等语言。目前正在整理一些后端的基础知识,主要包括Golang、Python、Mysql、Redis、Kafka、计算机网络、分布式等面试经常考察的知识点,以及面试热门的leetcode算法题解,希望大家互相学习进步。想要查看更多、更全的文章,请关注我的公众号 <喜欢吃烤鱼>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值