标签:redis 高性能分布式缓存 服务器 设计与实现 servercron
Redis服务器负责与多个客户端建立连接,处理客户端请求,保存各个数据库状态。通过使用由I/O多路复用技术实现的事件处理器,Redis服务器采用单线程单进程处理客户端命令请求。Redis通过redisServer结构来记录服务端的各种状态。
1、客户端发送命令请求,客户端将命令请求转换成协议格式。
2、服务端读取命令请求,将命令请求缓存在客户端输入缓冲区中,对输入缓冲区中的命令进行分析把参数和参数个数分别保存到客户端状态的argv属性和argc属性中,然后调用命令执行器执行指定的命令。
3、命令执行器根据argv[0]参数在命令表中查找参数所指定的命令,并将找到的命令保存到客户端状态cmd属性中
4、执行预备操作:
服务器每个100毫秒执行一次serverCron函数,通常情况下,该函数时redis服务器唯一的定时任务,它的主要职责如下:
1、更新服务器时间缓存,redisServer中有unixtime和mstime两个属性,由于100毫秒才调用一次,所以这两个属性保存的时间都是不精确的,如果要获取精确的系统时间,必须执行系统调用获取。
2、更新LRU时钟,redisServer中的lruclock属性保存了服务器的LRU时钟,它也是个服务器时间缓存,当服务器要计算一个数据库键的空转时间时,通过服务器的lruclock减redisObject的lru属性获取。serverCron默认以每10秒一次的频率更新lruclock,所以它也是一个估算值。
3、更新服务器每秒执行命令数。
4、更新服务器内存峰值,记录在redisServer的stat_peak_memory属性中。
5、处理SIGTERM信号,在启动服务器时,Redis会为服务器进程的SIGTERM信号关联处理器sigtermHandler函数,这个信号处理器负责在服务器接到SIGTERM信号时,打开服务器状态的shutdown_asap标识,每次serverCron函数运行时,程序会对服务器状态的shutdown_asap属性进行检查,并根据属性的值决定是否关闭服务器,在关闭服务器前服务器会进行RDB持久化操作,这就是服务器拦截SIGTERM信号的原因。
6、管理客户端资源,serverCron函数每次执行都会调用clientsCron函数, clientsCron函数会对一定数量的客户端进行一下两个检查:
标签:redis 高性能分布式缓存 服务器 设计与实现 servercron
原文地址:http://blog.csdn.net/pentiumchen/article/details/44468695