美文网首页
redisServer

redisServer

作者: 老杜振熙 | 来源:发表于2021-04-13 18:41 被阅读0次

命令执行过程

在服务端,跟服务器连接的所有客户端都对应一个redisClient结构体;当服务器接收到某个客户端发来的命令请求时,先将字符串存到对应的redisClient结构体的缓冲区中,然后调用分析器进行分析,提取出对于的argvargc;然后根据argv[0]命令表中查找对应的执行函数,进行执行(命令表是一个字典,key就是命令名,比如SET,value就是对应的redisCommand结构体,保存了函数指针,所需参数个数,等信息),当然,执行之前还需要进行检查,比如权限是否匹配,输入参数是否有效等等。

执行完毕后,将执行结果保存在redisClient的缓冲区中,随后向客户端所关联的socket发送信息即可。

serverCron函数

cron是时辰的意思,意味着这个函数需要定期执行,它的目的是管理服务器的资源,保证其良好运行。资源管理会涉及到很多方面的细节:

  • 服务器状态的时间缓存会得到更新,这是一个不太精确的时刻;
  • 服务器的LRU时钟unsigned lruclock会得到更新,该变量用于计算服务器中各个redis对象的空转时间(因为每个redis对象拥有一个变量,用于存储该对象最近一次访问对应的时间);
  • 服务器每秒钟的命令执行次数会得到更新;底层实现是:服务器会保存上一次执行serverCron函数时对应的时刻,以及自己已经执行的命令总次数;当本次执行cron时,作差求平均即可;服务器会默认保存16个这样的平均值,最后再求平均,即得到每秒钟命令执行次数;
  • 服务器的内存使用峰值会得到更新;
  • 为SIGTERM信号重新分配响应函数,即先生成RDB,再终止程序;
  • 保证持久化程序的正常运行;

相关文章

网友评论

      本文标题:redisServer

      本文链接:https://www.haomeiwen.com/subject/ryeclltx.html