1.不能再清晰的图了
2.每一层涉及的知识点
高性能主线:
1.线程模型:
单reactor单线程. 这里只是说处理请求. 其他rdb/aof/主从复制等是起新的进程的.
2.数据结构:
内存层:
每个数据结构的特点.跳表是什么,以及数据结构的时间复杂度
存储层:
rdb:
快照,可以配置例如900s内有三个变更就更新快照. 快照文件是二进制的 .rdb结尾的文件.
可以手动触发
save 同步的,阻塞
bgsave 异步的 fork一个子进程.思考下.fork会阻塞吗?会的,因为子进程要复制父进程的内存,操作系统底层会采用写时复制策略,因此不会fork瞬间复制全部,but,虚拟内存空间这些还是要复制的.因此内存使用越大,复制虚拟内存地址约耗时.
rdb优点:由于是二进制内容,使用rdb文件恢复很快
缺点:可能有丢失,可能有停顿(fork)
aof:
追加写命令到.aof文件.为了避免越写越大,会有aof重建过程,重建就是会把一些命令合并,另外会开辟一块新内存,用于存储在重建过程中新更新的请求.
问题:每个命令都会追加到aof文件中吗?
看配置.
appendfsync no:Redis不会主动调用fsync去将AOF日志内容同步到磁盘,具体的操作依赖于操作系统.
appendfsync everysec: 每秒刷新一次
appednfsync always:每次写操作都会调用一次fsync.
优点:
1.丢失的数据更少.一般是1s更新一次
2.写入性能高.顺序写嘛
缺点:
1.数据太大了,因为这个类似binlog.也不适合做冷备.
2.消耗性能大
epoll网络模型:
没啥说的.多路复用.
高可靠路线
主从复制:
https://blog.csdn.net/u012997470/article/details/110213144
哨兵机制:
https://blog.csdn.net/u012997470/article/details/113387574
高可扩展路线
分片 ,槽的分配
https://blog.csdn.net/u012997470/article/details/113393816