제가 공부한 내용을 정리하는 블로그입니다.
아직 많이 부족하고 배울게 너무나도 많습니다. 틀린내용이 있으면 언제나 가감없이 말씀해주시면 감사하겠습니다😁
2024년 4월 27일 온라인 강의 내용
- 레디스의 echo 명령: 받은 내용 그대로 전달.
set a 123
/*
* set a 123이라는 명령이 들어올 때..
* argv[0]: set
* argv[1]: a
* argv[2]: 123
* argc: 2
*/
Redis 실행 flow
- ServerCommandArg
- ServerCommand
- generate-command-code.py
- 해당 파일에서 make_cmd를 자동적으로 만들어줌.
- comand_list에 들어가는 내용과 JSON을 읽어와서 명령어를 추가.
- Document와 함수를 한번에 처리하기 위해 JSON을 추가하고 python을 실행하면 def 파일이 만들어짐.
- server.c에서 실제 함수 추가
- make 후 telnet 0 6379 접속
make_cmd
- 받은거 전달. 풀어서 저장하는 것만.
- 파라미터 함수들이 바뀌면 or 구조체가 바뀌면(순서마저도) 작업을 일일이 바꿔야 하므로 이러한 트릭을 사용.
- CommandStruct 구조체의 생성자로 serverComandTable[]
populateCommandTable
- 명령 테이블
- server.c에 정의
- serverCommandTable[]을 하나씩 돌면서 커맨드를 만들어서 populateCommand를 dicAdd server.comand라는 키로 저장
- 데이터를 키로 찾아오는 것.
lookupCommand
- 명령 함수 찾아옴.
- networking.c
- 레디스 telnet이라 썼을때
- 한줄로 보낼 수도 있고
- 여러 줄로 보낼 수도 있음
- processMultiBulk
- 함수가 끝나면 명령어가 만들어짐
- processCommandAndResetClient 함수를 실행하면
- processCommand 실행
- lookupCommand 실행
- lookupCommandLogic 실행
- 명령이 들어있는 해시 테이블 반환.
- 명령어를 찾으면 이제 실행.
- processInlineBuffer