为什么要持久化?
首先就是缓解mysql的压力 首先我们的redis是作为缓存数据的 也就是当我们收到请求后
如果我们缓存有数据 是先走缓存再走mysql
如果我们不持久化 因为我们的数据存在内存中 所以系统突然关机什么的都会丢失数据
所以一旦丢失 用户来请求 都是去mysql直接拿数据 这样mysql压力突然会很大不安全
RDB 将数据直接存入磁盘中 持久化的是数据 优点 不影响性能 缺点 丢失的数据很多
RDB全称Redis Database Backup file(Redis数据备份文件),也被叫做Redis数据快照。简单来说就是把内存中的所有数据都记录到磁盘中
执行时机
RDB持久化在四种情况下会执行:
执行save命令
执行bgsave命令
Redis停机时
触发RDB条件时
1)save命令
save命令会导致主进程执行RDB,这个过程中其它所有命令都会被阻塞。只有在数据迁移时可能用到。
2)bgsave命令
这个命令执行后会开启独立进程完成RDB,主进程可以持续处理用户请求,不受影响
3)停机时
Redis停机时会执行一次save命令,实现RDB持久化。
4)触发RDB条件
Redis内部有触发RDB的机制,可以在redis.conf文件中找到
RDB方式bgsave的基本流程?
fork主进程得到一个子进程,共享内存空间
子进程读取内存数据并写入新的RDB文件
用新RDB文件替换旧的RDB文件
RDB会在什么时候执行?save 60 1000代表什么含义?
默认是服务停止时
代表60秒内至少执行1000次修改则触发RDB
RDB的缺点?
RDB执行间隔时间长,两次RDB之间写入数据有丢失的风险
fork子进程、压缩、写出RDB文件都比较耗时
AOF 将命令存入磁盘中 持久化的是数据 优点 丢失的数据会很少 缺点 可能会影响性能
AOF全称为Append Only File(追加文件)。Redis处理的每一个写命令都会记录在AOF文件,可以看做是命令日志文件。
如果同时有RDB AOF 4.0之前会恢复AOF RDB不恢复 4.0之后先RDB后AOF