redis 버전과 관련된 내용입니다. redis-3.0과 최신 버전의 object.c 파일을 보면 StringObject 생성 시 REIDS_ENCODING_EMBSTR_SIZE_LIMIT와 비교되는 것을 알 수 있습니다. 기본값은 39입니다. redis-2.8 버전의 소스코드를 찾아보니 비교가 안되고 직접 만들어봤습니다. 그래서 이 embstr 인코딩은 버전 3.0 이상에서만 나타난 것 같습니다.
왜 39인지는 설명하기가 더 복잡해서 천천히 설명하겠습니다. embstr은 redisObject와 sdshdr로 구성된 연속 메모리 영역입니다. 그 중 redisObject는 16바이트를 차지합니다. buf의 문자열 길이가 39일 때 sdshdr의 크기는 8+39+1=48입니다.
으아악
Redis는 2.4 버전부터 jemalloc 메모리 할당자를 사용하기 시작합니다. 이는 glibc의 malloc보다 훨씬 낫고 메모리를 절약합니다. 여기서 jemalloc은 8, 16, 32, 64바이트의 메모리를 할당한다는 것을 간단히 이해할 수 있습니다. 최소 embstr은 16+8+8+1=33이므로 최소 할당은 64바이트입니다. 문자 수가 39자 미만인 경우 64바이트가 할당됩니다.
redis 버전과 관련된 내용입니다.
redis-3.0과 최신 버전의 object.c 파일을 보면 StringObject 생성 시 REIDS_ENCODING_EMBSTR_SIZE_LIMIT와 비교되는 것을 알 수 있습니다. 기본값은 39입니다.
redis-2.8 버전의 소스코드를 찾아보니 비교가 안되고 직접 만들어봤습니다.
그래서 이 embstr 인코딩은 버전 3.0 이상에서만 나타난 것 같습니다.
왜 39인지는 설명하기가 더 복잡해서 천천히 설명하겠습니다.
Redis는 2.4 버전부터 jemalloc 메모리 할당자를 사용하기 시작합니다. 이는 glibc의 malloc보다 훨씬 낫고 메모리를 절약합니다. 여기서 jemalloc은 8, 16, 32, 64바이트의 메모리를 할당한다는 것을 간단히 이해할 수 있습니다. 최소 embstr은 16+8+8+1=33이므로 최소 할당은 64바이트입니다. 문자 수가 39자 미만인 경우 64바이트가 할당됩니다.embstr은 redisObject와 sdshdr로 구성된 연속 메모리 영역입니다. 그 중 redisObject는 16바이트를 차지합니다. buf의 문자열 길이가 39일 때 sdshdr의 크기는 8+39+1=48입니다. 으아악
기본값 39는 이렇게 나온 것입니다.