一、Redis持久化的必要性
相信大家普遍都知道,Redis是NoSQL中的一员,其数据都保存在内存中。那我们知道,内存有一个特性就是断电即失!所以,Redis的数据存储如果仅仅瞄准内存的话,数据的安全性和可靠性是无法得到保证的!故而,引申出Redis持久化机制。
那么,有关Redis持久化机制的详细解读又是怎样的呢?其实就是Redis的数据除了存储在内存中,还可以配置持久化策略:将Redis的数据保存到磁盘上。这样,即使Redis宕机或者服务故障,我们通过重启Redis服务,可以从磁盘中恢复历史数据。Redis持久化策略的应用,大大提升了数据的安全性和可靠性!
![在这里插入图片描述](https://img.php1.cn/3cd4a/1eebe/cd5/8373b1277127c518.webp?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3d1YjExNg==,size_16,color_FFFFFF,t_70)
二、Redis如何实现持久化
Redis目前有2种方式进行数据的持久化:
- RDB方式:在指定时间间隔内对数据进行快照存储
- AOF方式:记录每次对Redis服务的数据写入操作命令,当服务重启时通过重新执行这些命令来恢复原始数据
2.1 RDB方式
2.1.1 客户端直接通过命令BGSAVE或者SAVE来创建一个内存快照
- BGSAVE 调用fork来创建一个子进程,子进程负责将快照写入磁盘,父进程照常工作,不受任何影响。
- SAVE 执行SAVE命令过程中,不再响应其他命令。
2.1.2 进入redis安装目录,找到redis.conf配置文件,在其内调整save命令的配置选项。redis发生数据写入操作的个数满足条件会触发BGSAVE命令的执行
# 900秒之内至少发生1次数据写入操作
save 900 1
# 300秒之内至少发生10次数据写入操作
save 300 10
# 60秒之内至少发生10000次数据写入操作
save 60 10000
2.1.3 RDB的优缺点
优点 | 缺点 |
---|
对性能影响最小 | 同步时易丢失数据(具体看配置的数据写入时间间隔) |
RDB快照文件在数据恢复速度上,比AOF要快得多 | 如果数据集比较大且CPU不够强悍(比如单核CPU),Redis在fork子进程时可能要消耗相对较长的时间,会影响Redis对外提供服务的能力 |
2.2 AOF方式
2.2.1 开启AOF持久化
appendonly yes
2.2.2 AOF策略调整
# 每次有数据修改发生时都会写入AOF文件
appendfsync always# 每秒钟同步一次,该策略为AOF的缺省策略
appendfsync everysec# 从不同步。高效但是数据不会被持久化
appendfsync no
2.2.3 AOF的优缺点
优点 | 缺点 |
---|
最安全 | 文件体积较大 |
容灾 | 性能消耗比RDB要高 |
易读,可修改 | 数据恢复速度上比RDB慢 |