Foreword:
We know that the redis server is an event-driven program, which needs to handle two types of events, namely file events and time events.
So what is the redis event processing process like? Let’s take a look at the picture below:
The aeMain function schedules and executes file events and time events by calling the aeProcessEvents function. Event-related information is recorded in aeEventLoop. First, obtain the execution time interval n of the shortest time event through the aeSearchNearestTimer function, then call the aeApiPoll function to obtain the monitored socket, and finally execute the event processing functions rfileProc and wfileProc corresponding to the socket, and finally execute the time event function processTimeEvents
File Event
Redis has developed its own network event processor based on the Reactor model. This processor is called a file event handler:
The file event processor uses an IO multiplexer to listen to multiple sockets and associate different event processors with the socket according to the tasks currently performed by the socket
When the monitored socket is ready to perform operations such as connection response (accept), read (read), write (write), close (close), etc., when a file event occurs, these file events The processor will call the event handler previously associated with the socket to process the event
The composition of the file event handler
(Learning video sharing: redis video tutorial)
Handler of file events
Redis has written multiple handlers for file events:
Connection response processor: When the Redis server is initialized, the program will associate this connection response processor with the AE_READABLE event of the service listening suite. When a client uses the connect function to connect to the server listening socket Yes, the socket will generate the AE_READABLE event, trigger the connection response processor to execute, and perform the corresponding socket response operation
Command request processor: When a client connects After the response processor successfully connects to the server, the server will associate the AE_READABLE event of the client socket with the command request processor. When the client sends a command request to the server, the socket will generate an AE_READABLE event and trigger the command request. The processor executes and performs the corresponding socket read operation
Command reply processor: When the server has a command reply that needs to be passed to the client, the server will socket the client The AE_WRITABLE event of the interface is associated with the command reply processor. When the client is ready to receive the command reply from the server, the AE_WRITABLE event will be generated, triggering the execution of the command reply processor and performing the corresponding socket write operation.
A complete client-server connection event
The server listens to the AE_READABLE event of the package word, and generates AE_READABLE when the client sends a connection request event, the server will respond to the client's connection request, associate the AE_READABLE event of the client socket with the command request processor, and the client can send a command request to the server
The client sends a command request to the server. The client socket will generate an AE_READABLE event, triggering the command processor to execute. Executing the command will generate a corresponding command reply. The server will combine the AE_WRITABLE event of the client socket with the command. Reply processor association
When the client attempts to read the command reply, the client socket will generate an AE_WRITABLE event, triggering the execution of the command reply processor. When the command reply processor replies to the command After all is written to the socket, the server will contact the association between the AE_WRITABLE event of the client socket and the command reply handler
Time event
Redis Time events are divided into timed events and periodic events. A time event consists of three attributes:
id: the globally unique ID created by the server for the time and time when: the arrival time of the time and time is recorded (UNIX timestamp with millisecond precision) timeProc: time event processor
All time events of the server are placed in an unordered linked list. Whenever the time event executor runs, it traverses the entire linked list, finds all arriving time events, and calls the corresponding event handler. The Redis server in normal mode only uses one time event, serverCron, and in benchmark mode, the server only uses two time events, so the performance of event execution is not affected.
Related recommendations: redis database tutorial
The above is the detailed content of Analysis of redis event processing process. For more information, please follow other related articles on the PHP Chinese website!