Redis) 이것이 레디스다 10 - 레디스 내부 구조 2

문자열 데이터

레디스는 문자열 데이터에 대한 빠른 연산을 위해서 특별한 구조체를 사용한다.

1
2
3
4
5
struct sdshdr {
int len; // 문자열의 길이가 저장되는 필드
int free; // 할당된 버퍼의 남은 길이가 저장되는 필드, 문자열 값이 추가될때 새로운 메모리 할당 여부를 결정한다.
char buf[]; // 문자열 데이터가 저장되는 필드
}

sdshdr 구조체를 사용함으로써 저장된 문자열의 길이를 확인하는데 O(1)의 시간 복잡도로 처리 가능하다.


레디스 공유객체

레디스는 자주 사용되는 값을 전역 변수인 공유 객체에 저장해 두고 사용한다.

이 공유객체에 포함되는 값의 종류는 에러 메시지, 프로토콜을 위한 문자열, 자주 사용되는 문자열, 0부터 9999까지의 숫자가 해당되고 이 모든 값은 redisObject 구조체를 사용하여 표현된다.

레디스 서버는 redis.c 파일의 main 함수를 통해서 시작된다.
일련의 작업이 완료되면 initServer 함수가 호출되는데, 이 함수에서 공유객체 생성을 위한 createSharedObjects 함수가 호출된다.

  • REDIS_SHARED_INTEGERS

미리 등록하고자 하는 숫자의 객수를 지정하는 상수로 redis.h에 10,000으로 지정되어 있다.
더 많은 숫자를 저장하고 싶다면 이 수를 적정한 크기로 변경하고 다시 컴파일하여 사용할 수 있다.
REDIS_SHARED_INTEGERS 값을 크게 잡을 수록 공유객체를 할당하는 데 메모리가 더 들게된다.

Share