redis启动流程

 
 
//--打散argv和environ所存储内容的空间
spt_init(argc, argv);
//--主要在初始化全局的server对象中的各个数据成员
initServerConfig();
//--继续初始化全局的server对象,并在里面初始化了全局的shared对象
//--监听端口和uinx socket文件
//--启动bio线程
//--lua环境
initServer();
//--检查系统的THP和overcommit_memory
linuxMemoryWarnings();
//--检查tcp_backlog和系统的somaxconn参数值
checkTcpBacklogSettings();
//--根据RDB或者AOF文件加载旧数据,优先AOF文件
loadDataFromDisk();
//--进入事件循环处理
aeMain(server.el);


函数分析

  • spt_init()

    redis一开始就把agrv所存储的对象都打散开,是为了后面修改程序名字做铺垫,那为什么改个程序名要这 样大费周折呢,那是因为agrv是连续存储的。具体一些知识点我网上找了个资料可以参考下。

    http://blog.youkuaiyun.com/hengshan/article/details/7835981

  • linuxMemoryWarnings()

    redis启动前检测当前系统环境对于内存申请的策略,主要是检查系统里面的/proc/sys/vm/overcommit_memory的文件内容,里面的取值

    0 -> 申请的虚拟内存大小大于现有的物理内存时,返回失败

    1 -> 忽视现有的物理内存,立即分配虚拟内存,当触发缺页而物理内存不足时可能会被oom进程杀死

    2 -> 每次申请都根据现有的物理内存计算出一个阈值,然后跟这个阈值做比较来判断是否允许本次申请

    参考资料:http://blog.chinaunix.net/uid-20671208-id-4440244.html

    当取到的值为0时,redis会打出警告信息。

  • checkTcpBacklogSettings()

    redis启动前进行端口的监听队列的长度检查,通过检查系统的/proc/sys/net/core/somaxconn文件的内容,对于监听队列的长度redis默认是511,由这个值REDIS_TCP_BACKLOG来定义。当取到的值小于server.tcp_backlog,redis会打印出警告信息。

    参考资料:http://blog.youkuaiyun.com/taolinke/article/details/6800979

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值