2. redis持久化
接下来,我们讲解redis企业级的持久化方案。
2.1. redis持久化的意义
redis持久化的意义,在于故障恢复。
我们部署redis,作为cache缓存的同时,也可以保存一些较为重要的数据。如果redis没有持久化,redis遇到灾难性故障的时候,就会丢失所有的数据。
通过持久化将数据备份一份到磁盘,然后定期同步和备份到一些云存储服务上去,当redis服务器出现灾难时,就可以从云存储上拉取数据,恢复到新的redis缓存中,保证数据不丢失全部,能恢复一部分数据。
如下图,redis持久化的意义:
企业级的redis集群架构,支撑海量数据、高并发、高可用,而持久化功能提供的灾难恢复,数据恢复,为redis集群架构的高可用提供有力保障。
当redis整个集群架构挂了,redis就不可用,我们要让redis尽快恢复,提供服务。
1、redis没有做持久化,重启redis后,也不可用,因为没有数据。就会导致大量的请求过来,缓存全部无法命中,就会直接去访问数据库,导致缓存雪崩问题。
2、 redis做了持久化,具备缓存的备份和恢复方案,那么即使redis故障了,也可以通过备份数据,快速恢复,一旦恢复立即对外提供服务。
redis中的数据受内存大小限制,存放数据的量不是无限增长,到一定时间,redis会通过缓存淘汰算法LRU,自动将一部分数据从内存中给清除。
redis的持久化与系统的高可用是有直接关系。redis持久化主要有RDB,AOF两种方式。
2.2. RDB持久化
2.2.1. RDB原理
RDB 的全称是 Redis database. 顾名思义,RDB 就是将 Redis 数据库,用来存储数据的,所以通过RDB方式持久化,就是将存在Redis内存中的数据周期性的写入到 RDB文件中保存到磁盘上,从而实现持久化的。
既然RDB机制是通过把某个时刻的所有数据生成一个快照来保存,那么就应该有一种触发机制,是实现这个过程。对于RDB来说,提供了三种机制:save、bgsave、自动化。我们分别来看一下
2.2.2. redis生成RDB文件的触发机制
1、 save触发方式
该命令会阻塞当前Redis服务器,执行save命令期间,Redis不能处理其他命令,直到RDB过程完成为止。具体流程如下: