redis
2024-01-26 21:43:40 0 举报
redis主从同步
作者其他创作
大纲/内容
t1 t2 t3
OS调度
0
否,赋值redisObject的lru字段
bgsave生成RDB文件
反序列化
等待(WATING)
Usernameage
同步指令PSYNC2 replid offset
redisObject.lru为不带符号位24bit位的二进制
Node hash; key; value; next;
是否超过最大内存
否
计算数据多久时间没访问
15
synchronized
优先淘汰方法返回值最大的数据
终止(TERMINATED)
waitjoinpark
是
如果有slave节点,指令会存入replication _backlog_buffer,但是该区间有大小限制,超过大小会覆盖之前的指令
获取到锁
6
ServerA
5
是,执行淘汰逻辑
ServerB
返回RDB文件 & offerset
7
根据RDB文件加载数据
内存
访问、操作redisObject
序列化
redis set 指令
主线程指令写入
文本
CPU-Core 1
12
判断是否全量同步
怎么判新是否全量1、传进来的repid是否跟master的一致,如果不一致直接全量。2、如果repid一致:继续判断传过来的偏移量判断相差的数据是否在replication_backlog_buffer,如果不在,进行全量同步。3、否则,进行增量同步
部分同步,如果slave网络断开一会,从backlog_buffer同步
赋值redisObject的lru字段
master服务器
serverIruclock是100ms生成的秒单位的最后24位如果serverlruclocktredisObject.lru大:server.lruclock-redisObject.lru如果serverIruclockLredisObject.Iru小:serverlruclock+ (24bit的最大值-redisObject.lru)得到值越大,越久没有访问
运行(RUNNABLE)
阻塞(BLOCKED)
就绪(READY)
CONTINUE
初始(NEW)
replication_buffer
8
9
3
11
redisObject.lru=server.lruclock
serverCron()
sleep(1000)wait(long)join()LockSupport.park()
网络通信
server.lruclock=系统秒单位的后24bit
4
notifynotifyAllLockSupport.unpark
2
得到server.lruclock
replication_backlog_buffer
serverCron方法发起数据同步
超时等待(TIMED WATING)
为每个slave创建一个缓冲区间,用户生成RDB之后的指令命令存储
FULLRESYNC master_replid offset
CPU-Core 0
slave服务器
13
estimateObjectldleTime
size 16
取样获取数据(maxmemory - samples)配置,默认每次获取5
10
14
1
清空自己的内存数据
存入内存中
0 条评论
下一页