导图社区 redis持久化脑图
redis是一个keyvalue存储系统,下图讲述了RDB、AOF、fork操作优化、子进程优化、追加阻塞等,值得收藏学习哦!
这是一篇关于Codecademy - Javascript的思维导图,主要内容有Variables、Functions、lf statement、Switch statement、Loops等。
这是一篇关于js模块化的思维导图,主要内容有模块加载方案、前端模块化开发的价值、模块的循环引用。
typescript语法的思维导图,主要内容有基本数据类型、对象类型、任意类型Any、联合类型Union Types、元组Tuple等。
社区模板帮助中心,点此进入>>
互联网9大思维
安全教育的重要性
组织架构-单商户商城webAPP 思维导图。
个人日常活动安排思维导图
域控上线
西游记主要人物性格分析
17种头脑风暴法
python思维导图
css
CSS
持久化
RDB
将数据生成快照保存到硬盘中
手动触发
save(废弃)
bgsave
fork子进程执行
自动触发
“save m n”配置
从节点全量复制
执行debug reload命令
执行shutdown命令 + 没有开启AOF
优
适用于备份,全量复制
恢复数据比AOF快
缺
需要fork子进程,无法实时
新老版本RDB二进制文件格式不兼容
AOF
以日志的方式记录写命令,解决持久化的实时性问题,主流方式
使用appendonly yes开启
过程
命令写入
写入AOF缓冲区
文件同步
always
命令写入aof_buf后调用操作系统的fsync同步到AOF文件
no
命令写入aof_buf后调用操作系统的write同步到操作系统页缓存
everysec(默认,建议)
命令写入aof_buf后调用write,专门线程每秒执行fsync同步到AOF文件
文件重写
重写文件减小
超时数据不再写入
旧文件无效的命令不再写入
合并多条命令
触发方式
bgrewriteaof
根据auto-aof-rewrite-min-size和auto-aof-rewrite-percentage确定
aof_rewrite_buf
重写期间响应写命令
重写过程
重启加载
判断是否开启且存在AOF文件
不存在AOF文件加载RDB文件
加载AOF/RDB文件成功redis启动成功,否则失败
优化
fork操作优化
使用物理机或者高效支持fork操作的虚拟化技术,避免使用Xen
控制redis实例最大内存,建议10GB
合理配置linux内存分配策略
降低fork操作频率
放宽AOF触发时机
避免不必要的全量复制
子进程优化
CPU
避免和CPU密集型应用部署在一起
内存
由于写时复制的存在,尽量保证同一时刻只有一个子进程在操作,不要在大量写入时重写
硬盘
不要和硬盘高负载的应用部署在一块,如存储,消息队列等
开启no-appendfsync-on-rewrite
分盘存储AOF文件
单机多redis实例优化
轮训确保同一时刻只有一个实例做AOF重写操作
追加阻塞
发生原因
主线程需要比对上次同步AOF时间,成功时间小于2s返回,大于则阻塞(系统fsync阻塞主线程)
后果
everysec配置最多可能丢失2s数据