标签:fork aof 快照 redis 概念 内存 进程 相关 重写
数据类型
string/list/hash/set/zset
其中list底层数据结构3.2版本为quicklist(由linkedlist+ziplist组合而成),zset由dict+skiplist实现
持久化机制
https://blog.csdn.net/JavaTeachers/article/details/108998121
rdb
关注点
- bgsave(即开始rbd备份)开启方式为x时间内发生了x次事件
- 可后台执行,通过操作系统命令fork子进程,该过程阻塞父线程(即不可接受新消息),fork之后通过内存快照异步生成rdb文件然后替换原rdb文件(即每次生成的rbd都是全量文件)
- 生成内存快照到下次fork子进程时间段中父进程做的增加命令无法同步
- rdb是格式紧凑的二进制文件,redis异常恢复速度快
aof
关注点
- aof本质是记录命令操作日志放入内存缓存区,然后在合适时机(可配置,默认为1s1次)写入磁盘
- aof很臃肿,记录了很多无用命令,需要重写
- 重写流程为fork子进程,子进程对内存快照中的数据转化为新增命令写入新的aof文件,同时父进程新开辟重写缓冲区,用来缓存生成内存快照到写完新aof文件这段时间内的新命令,完成新的aof文件后将重写缓冲区中的命令追加到aof,然后替换旧文件即完成整个重写流程
写时复制
fork子进程采用了写时复制技术,通俗来讲即当发生fork时,内核会把父进程的内存页权限设置为read-only,在父进程内存没有发生变化的场景下,子进程无需开辟新的物理内存空间,直接映射到父进程的内存地址,当此进程内存数据发生变化时,cpu硬件检测到内存页时read-only,会触发页异常中断,此时内核会开辟内存,复制内存数据,至此父子进程各有一份独立数据,在redis场景中表现出子进程在备份过程中,无法感知到最新的数据变化。
慢查询
showlog get
架构
- 单节点
- 主从
- 哨兵+主从,哨兵使用raft保持分布式一致性
- 集群
- 可扩展性,一致性hash,哈希槽
标签:fork,aof,快照,redis,概念,内存,进程,相关,重写 来源: https://www.cnblogs.com/wish5714/p/14977958.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。