Mingyu Kim

Set - InSet

1. 오직 “정수”만을 위한 초슬림 구조

SADD myset 10 20 30처럼 오직 정수 데이터만 넣는다면, 레디스는 비싼 Hash Table대신 IntSet이라는 특수한 배열 구조를 사용한다.

2. 업그레이드

처음부터 64비트(8바이트) 정수 공간을 할당하지 않고, 데이터의 크기에 따라 인코딩을 동적으로 바꾼다.

한 번 커진 인코딩은 데이터가 삭제되어도 다시 작아지지는 않는다. (메모리 재할당 비용 때문)

3. 왜 정렬해서 저장할까?

IntSet은 Hash Table이 아니기 때문에 O(1) 조회가 불가능하다. 대신 데이터가 정렬되어 있어 이진 탐색을 사용하여 O(log N)의 속도로 데이터를 찾는다.

데이터가 수천 개 이하일 때는 메모리 로컬리티(CPU 캐시 효율) 덕분에 Hash Table보다 훨씬 효율적이다.

3. 언제 HashTable로 바뀌나?

아래 두 상황 중 하나라도 발생하면 바뀐다.