Redis单机版本框架

Redis主流程伪代码

def main():
 init_server()
 
 while server_is_not_shutdown():
       time = aeSearchNearestTimer()
       beforeSleep()
       aeApiPoll(time)
       processFileEvents()
       processTimeEvents()
 
 clean_server()

Redis main函数调用流程图及关键节点

图片描述

一条简单的set命令的执行流程

图片描述

serverCron函数的功能

图片描述

Q&A

1.bgsave执行时再次执行bgsave如何处理?linux

直接返回,返回信息会通知正在执行.redis

若是在aof rewrite时执行bgsave,会直接返回不能执行.分布式

看代码此处应该有bgsave schedule命令,若是此时在执行aof rewrite,则会在aof结束后在serverCron中执行。函数

代码以下 测试

图片描述
2.aof rewrite正在执行时再次发送bgrewriteaof会如何处理?spa

直接返回,返回信息通知正在执行rest

若是此时在执行rdbsave,则会在serverCron中在rdbsave结束以后执行aof rewrite.code

代码以下:server

图片描述
3.bgsave时若是master还在执行写入,因为linux COW机制,此时会给子进程拷贝一份数据,致使双倍内存。进程

待在测试环境验证是否会出现

4.client端发送的命令可否在server端保证顺序?

5.为何redis自己支持分布式生产环境还在使用codis?

相关文章
相关标签/搜索