zoukankan      html  css  js  c++  java
  • 【redis源码】(九)Redis

     

    前些天主要看了redis底层依赖的一些数据结构和事件管理库的代码,比较零散,但大体上了解了作者的设计思路.

    对不同规模【n】的数据采用不同的数据结构以实现对内存利用的"最优",这里的最优我想作者也没有做过严格的实验,不同的应用场景在redis上的表现肯定有所不同,如果有必要,可以再配置文件中对一些阈值做调整,比如 hash-max-zipmap-entries和 hash-max-zipmap-value,这两个参数决定了在一定数据规模的时候,是用zipmap作为哈希表数据结构还是dict。

    好了,开始介绍redis在没有异常的情况下默认的整个工作流程,从main函数开始:

    1. 初始化serverConfig

    初始化redisServer的成员为默认值,如默认端口号,db数量,是否是守护进程,初始化server.commands

    2. 读配置文件

    从参数中指定的配置文件一行行获取配置信息,配置文件最大为1024行~

    3. 设置守护进程

    读取完配置后,如果配置中的daemonize为1,则设置redis为守护进程【弑父认1为父】

    4. 执行initServer

    a. 初始化对某些信号的处理方式

    b. 注册三类事件到ae:

    分别是定时事件,执行serverCron, 打印redis各个db的状态信息,试探得进行rehashing扩容,关闭超时的client, 删除过期的key【if master】,连接master【if client,%10】,修改cron计数信息,返回下次循环的时间,

    端口监听事件,acceptTcpHandler,当前来连接的fd可读时,读query并进行处理

    unix端口监听事件,acceptUnixHandler

    4. 如果设置的工作模式为appendonly,则从appendfile中读取已有的持久化数据。否则,从rdbfile中读取持久化数据以完成重启后的数据恢复

    5. 设置ae时间管理每一个loop前要执行的方法 beforeSleep

    6.开始进入时间管理

    喜欢一起简单,实用的东西,拒绝复杂花哨,我不是GEEK.
  • 相关阅读:
    地磁室内导航定位
    毛蔚青:图片室内定位
    利用Project Tango进行室内三维建模 精度评定
    傅里叶变换详解
    第四届空间信息智能服务研讨会会议指南
    联想Phab2 Pro Tango手机测评
    Learning ROS for Robotics Programming
    柳景斌:智能手机室内定位与智能位置服务
    VR
    发送get和post请求时常用的content-type
  • 原文地址:https://www.cnblogs.com/igloo1986/p/2679471.html
Copyright © 2011-2022 走看看