제가 공부한 내용을 정리하는 블로그입니다.
아직 많이 부족하고 배울게 너무나도 많습니다. 틀린내용이 있으면 언제나 가감없이 말씀해주시면 감사하겠습니다😁
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에서 실제 함수 추가
  • maketelnet 0 6379 접속

make_cmd

  • 받은거 전달. 풀어서 저장하는 것만.
  • 파라미터 함수들이 바뀌면 or 구조체가 바뀌면(순서마저도) 작업을 일일이 바꿔야 하므로 이러한 트릭을 사용.
  • CommandStruct 구조체의 생성자로 serverComandTable[]

populateCommandTable

  • 명령 테이블
  • server.c에 정의
  • serverCommandTable[]을 하나씩 돌면서 커맨드를 만들어서 populateCommanddicAdd server.comand라는 키로 저장
  • 데이터를 키로 찾아오는 것.

lookupCommand

  • 명령 함수 찾아옴.
  • networking.c
    • 레디스 telnet이라 썼을때
      • 한줄로 보낼 수도 있고
      • 여러 줄로 보낼 수도 있음
    • processMultiBulk
      • 함수가 끝나면 명령어가 만들어짐
      • processCommandAndResetClient 함수를 실행하면
      • processCommand 실행
      • lookupCommand 실행
      • lookupCommandLogic 실행
      • 명령이 들어있는 해시 테이블 반환.
      • 명령어를 찾으면 이제 실행.
    • processInlineBuffer

+ Recent posts