深入redis内部之redis启动过程之二
接上文,继续分析代码 1. 设置线程安全模式 /*设置线程安全标识符为1*/ void zmalloc_enable_thread_safeness(void) { zmalloc_thread_safe = 1;
2. 内存溢出处理 zmalloc_set_oom_handler(redisOutOfMemoryHandler);/* 内存溢出的调用方法*/? ?void zmalloc_set_oom_handler(void (*oom_handler)(size_t)) {
//调用下一级 static void (*zmalloc_oom_handler)(size_t) = zmalloc_default_oom; //最终调用 static void zmalloc_default_oom(size_t size) { fprintf(stderr,"zmalloc: Out of memory trying to allocate %zu bytesn",size); fflush(stderr); abort();} 3.生成hash seed srand(time(NULL)^&^tv.tv_usec^getpid());
?3.1?time(?)函数头文件:#include? 3.2?getpid(取得进程识别码)表头文件 #include 3.3?srand()函数?void srand(unsigned seed) 初始化随机数发生器。 3.4?gettimeofday()函数 #include 3.5 设置hash seed uint32_t dict_hash_function_seed = <span style="color: #0000ff;">void<span style="color: #000000;"> dictSetHashFunctionSeed(uint32_t seed) {
dict_hash_function_seed =<span style="color: #000000;"> seed; } 4. 检查是否sentime模式(集群的临时方案) server.sentinel_mode =
checkForSentinelMode( argc, ** </span><span style="color: #0000ff;">if</span> (strstr(argv[<span style="color: #800080;">0</span>],<span style="color: #800000;">"</span><span style="color: #800000;">redis-sentinel</span><span style="color: #800000;">"</span>) != NULL) <span style="color: #0000ff;">return</span> <span style="color: #800080;">1</span><span style="color: #000000;">;
</span><span style="color: #0000ff;">for</span> (j = <span style="color: #800080;">1</span>; j < argc; j++<span style="color: #000000;">)
</span><span style="color: #0000ff;">if</span> (!strcmp(argv[j],<span style="color: #800000;">"</span><span style="color: #800000;">--sentinel</span><span style="color: #800000;">"</span>)) <span style="color: #0000ff;">return</span> <span style="color: #800080;">1</span><span style="color: #000000;">;
</span><span style="color: #0000ff;">return</span> <span style="color: #800080;">0</span><span style="color: #000000;">;
} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |