머리말:
우리는 Redis 서버가 파일 이벤트와 시간 이벤트라는 두 가지 유형의 이벤트를 처리해야 하는 이벤트 중심 프로그램이라는 것을 알고 있습니다.
그럼 Redis 이벤트 처리 프로세스는 어떤가요? 아래 그림을 살펴보겠습니다.
aeMain 함수는 aeProcessEvents 함수를 호출하여 파일 이벤트 및 시간 이벤트를 예약하고 실행합니다. 이벤트 관련 정보는 aeEventLoop에 기록됩니다. 먼저 aeSearchNearestTimer 함수를 통해 가장 짧은 시간 이벤트의 실행 시간 간격 n을 얻은 후 aeApiPoll 함수를 호출하여 모니터링되는 소켓을 얻은 다음 마지막으로 소켓에 해당하는 이벤트 처리 함수 rfileProc, wfileProc를 실행하고 마지막으로 시간 이벤트를 실행합니다. function processTimeEvents
File events
Redis는 Reactor 모델을 기반으로 자체 네트워크 이벤트 프로세서를 개발했습니다. 이 프로세서를 파일 이벤트 핸들러(파일 이벤트 핸들러)라고 합니다.
파일 이벤트 핸들러는 IO 멀티플렉싱을 사용합니다. 소켓은 현재 소켓에서 수행되는 작업에 따라 다양한 이벤트 핸들러를 소켓과 연결합니다
모니터링된 소켓이 연결 응답(수락), 읽기(읽기), 쓰기(쓰기), 닫기(닫기)를 수행할 준비가 되면 및 기타 작업에서 파일 이벤트가 발생하면 이러한 파일 이벤트 핸들러는 이벤트를 처리하기 위해 이전에 소켓과 연결된 이벤트 핸들러를 호출합니다
파일 이벤트 프로세서 구성
(동영상 공유 학습: redis 동영상 튜토리얼 )
파일 이벤트 프로세서
Redis는 파일 이벤트에 대해 여러 프로세서를 작성했습니다.
연결 응답 프로세서: Redis 서버가 초기화되면 프로그램은 연결 응답 프로세서를 AE_READABLE 이벤트와 연결합니다. 클라이언트가 연결 기능을 사용하여 서버 수신 소켓에 연결하면 소켓은 AE_READABLE 이벤트를 생성하고 연결 응답 프로세서가 실행되어 해당 소켓 응답 작업을 수행합니다.
명령 요청 프로세서: 클라이언트가 연결 응답 프로세서를 통해 서버에 성공적으로 연결되면 서버는 클라이언트 소켓의 AE_READABLE 이벤트를 보냅니다. 명령 요청 프로세서와 연관되어 클라이언트가 서버에 명령 요청을 보내면 소켓은 AE_READABLE 이벤트를 생성합니다. , 명령 요청 프로세서가 해당 소켓 읽기 작업을 실행하고 수행하도록 합니다
명령 응답 프로세서: 서버에 클라이언트에 전달되어야 하는 명령 응답이 있는 경우 서버는 클라이언트 소켓의 AE_WRITABLE 이벤트를 다음과 연결합니다. 클라이언트가 서버에서 보낸 명령 응답을 받을 준비가 되면 AE_WRITABLE 이벤트가 생성되어 명령 응답 프로세서가 실행되고 해당 소켓 쓰기 작업이 수행됩니다
A 클라이언트-서버 연결 완료 이벤트
클라이언트가 연결 요청을 보내면 서버는 클라이언트의 연결 요청에 응답하고 AE_READABLE을 연결합니다. 클라이언트는 명령 요청 프로세서를 사용하여 서버
Customer에 명령 요청을 보낼 수 있습니다. 클라이언트 소켓은 AE_READABLE 이벤트를 생성하여 명령 프로세서를 트리거합니다. 명령을 실행하면 해당 명령 응답이 생성됩니다. 서버는 클라이언트 소켓의 AE_WRITABLE 이벤트와 명령 응답을 처리합니다. 클라이언트가 명령 응답을 읽으려고 하면 클라이언트 소켓이 AE_WRITABLE 이벤트를 생성하여 실행을 시작합니다. 명령 응답 프로세서의 명령 응답 프로세서가 모든 명령 응답을 소켓에 쓸 때 서버는 클라이언트 소켓의 AE_WRITABLE 이벤트와 명령 응답 프로세서
Time events
id: 서버에서 시간과 시간에 대해 생성한 전역 고유 ID: 시간과 시간의 도착 시간이 기록됩니다(밀리초 단위의 정밀도를 갖는 UNIX 타임스탬프) timeProc: 시간 이벤트 프로세서
서버의 모든 시간 이벤트는 순서가 지정되지 않은 연결 목록에 배치됩니다. 시간 이벤트 실행기가 실행될 때마다 전체 연결 목록을 순회하여 도착하는 모든 시간 이벤트를 찾아 해당 이벤트 핸들러를 호출합니다. 일반 모드의 Redis 서버는 1회성 이벤트인 serverCron만 사용하고, 벤치마크 모드에서는 2개의 타임 이벤트만 사용하므로 이벤트 실행 성능에는 영향을 미치지 않습니다.
관련 권장 사항: redis 데이터베이스 튜토리얼
위 내용은 Redis 이벤트 처리 프로세스 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!