a一、持久化的作用
redis所有数据保持在内存中,对数据的更新将异步地保存到磁盘上。
将内存的数据存入硬盘,当需要恢复数据时可以通过硬盘数据恢复至内存redis中去。
持久化方式
快照:记录某时某点的数据(mysql的dump 和 redis的RDB)
写日志:数据操作记录(mysql的binlog 和 redis 的 AOF)
二、RDB
RDB是一个二进制文件
触发机制
save(同步):保存redis快照命令 调用redis服务端,生成RDB二进制文件
文件策略,如果存在老的RDB文件,新替换老
bgsave(异步):生成redis的一个子进程,由子进程去完成RDB文件,完成通知主线程
文件策略与同步的相同
自动:redis提供自动生成RDB文件配置
dbfilename dump.rdb(生成rdb文件默认名称)
save 60 5 :标识60秒之内修改了5次
save自动配置满足任意一条就会被执行
注意:主从复制时也会生产RDB文件,执行shutdow命令时
缺点:耗时耗性能,不可控,丢失数据(宕机时容易丢失)
二、AOF
三种策略:always,everysec,no
always:每条命令都会fsync到硬盘中
everysec: 每秒把缓存区写入硬盘
no:交由操作系统决定
AOF相关配置
redis.conf
appendonly:如果AOF开启,那么在启动时Redis将加载AOF文件,它更能保证数据的可靠性
appendfilename:AOF文件名称
appendfsync:AOF策略
no-appendfsync-on-rewrite:重写aof时是否关闭掉正常的aof的增加
auto-aof-rewrite-percentage 100 :触发重写操作
auto-aof-rewrite-min-size 64mb :触发重写操作大小
AOF追加阻塞
1、阻塞定位方式,日志中存在:
2、命令:info Persistence 查看历史阻塞次数
三、RDB和AOF比较
同时开启了AOF和RDB时,重启redis会加载AOF
RDB的最佳策略:“关”(不能完全关闭,主从复制时会第一次执行bgsave,全量复制),集中管理,主关从开
AOF最佳策略:“开”(缓存和存储),AOF重写集中管理,策略使用everysec
四、fork操作
1、同步操作
2、与内存息息相关:内存越大,耗时越长(与机型有关)
3、fork时间查看:info: latest_fork_usec
改善fork
1.优先使用物理机或者高效支持fork操作的虚拟化技术
2.控制Redis实例最大可用内存: maxmemory
3.合理配置Linux内存分配策略: vm.overcommit_memory=1
4.降低fork频率∶例如放宽AOF重写自动触发时机,不必要的全量复制