[Redis] 데이터 타입의 최적화

2022. 2. 27. 15:59TIL💡/Database

레디스에서 모든 데이터 타입은 메모리를 저장하거나 성능을 높이는 다양한 인코딩을 사용할 수 있다.

예를 들어 단지 숫자만 갖는 문자열은 다른 인코딩을 사용하기 때문에 글자만 갖는 문자열보다 메모리를 덜 사용한다.

데이터 타입은 레디스 서버 설정에 정의된 임계값을 기반으로 다양한 인코딩을 사용한다.

 

레디스를 다운로드하면, redis.config라는 파일을 통해 설정값을 변경할 수 있고 커맨드라인을 통해 설정을 간단하게 바꿀 수 있다.

$ redis-server --hash-max-ziplist-entries 3 --hash-max-ziplist-value 5 --list-max-ziplist-entries 3 --list-max-ziplist-value 5 --set-max-intset-entries 3 --zset-max-ziplist-entries 3 --zset-max-ziplist-value 5

문자열

다음은 문자열에서 사용 가능한 인코딩 정보다.

 

📌 int

64비트 부호 있는 정수로 문자열을 표현할 때

 

📌 embstr

40바이트보다 작은 문자열을 표현할 때

 

📌 raw

40바이트보다 큰 문자열을 표현할 때

 

리스트

다음은 리스트에서 사용 가능한 인코딩 정보다.

 

📌 ziplist

리스트 크기의 엘리먼트가 list-max-ziplist-entries 설정보다 작고, 리스트의 개별 엘리먼트의 바이트가 list-max-ziplist-value 설정보다 작을 때

 

📌 linked list

리스트 크기의 엘리먼트가 list-max-ziplist-entries 설정보다 크거나, 리스트의 개별 엘리먼트의 바이트가 list-max-ziplist-value 설정보다 클 때

 

셋에서 사용 가능한 인코딩은 다음과 같다.

 

📌 intset

셋의 모든 엘리먼트가 정수고, 셋의 개수가 set-max-intset-entries 설정보다 작을 때

 

📌 hashtable

셋의 엘리먼트 중 하나라도 정수가 아니거나, 셋의 개수가 set-max-intset-entries 설정보다 클 때 

해시

📌 ziplist

해시의 필드 개수가 hash-max-ziplist-entries 설정보다 작고, 해시의 필드 이름과 값이 hash-max-ziplist-value 설정보다 작을 때

 

📌 hashtable

해시의 필드 개수가 ash-max-ziplist-entries 설정보다 크거나, 해시의 필드 값 중 하나라도 hash-max-ziplist-value 설정보다 클 때

 

정렬된 셋

📌 ziplist

정렬된 셋의 개수가 set-max-ziplist-entries 설정보다 작고, 정렬된 셋의 엘리먼트 값이 모두 zset-max-ziplist-value 설정보다 작을 때

 

📌 skiplist

정렬된 셋의 개수가 set-max-ziplist-entries 설정보다 크거나 정렬된 셋의 엘리먼트 값 중 하나라도 zset-max-ziplist-value 설정보다 클 때