2016-09-11 4 views
0

저는 약 256 개의 키가 있습니다. 각 키에 대해 많은 수의 비 - 회 계적 정수를 저장해야합니다. 다음은 각 키에 대한 총 값 (항목)의 개수가있는 상위 7 개 키입니다. 각 값은 큰 값을 갖는 고유 한 정수입니다.Redis : 메모리 최적화

Key  No. of integers (values) in the list 
Key 1 3394967 
Key 2 3385081 
Key 3 2172866 
Key 4 2171779 
Key 5 1776702 
Key 6 1772936 
Key 7 1748858 

기본적으로 Redis는이 데이터를 저장하는 데 많은 메모리를 사용합니다. 다음 매개 변수를 변경하면 메모리 사용량이 많이 감소 할 수 있음을 읽었습니다.

list-max-zipmap-entries 512 
list-max-zipmap-value 64 

사람이 나에게 이러한 위의 구성 명령을 설명시겠습니까 (512, 64 바이트?있다) 나는 메모리 사용량 감소를 달성하기 위해 내 경우에 대한 위의 구성 설정에 어떤 변화를 만들 수 있습니까?

항목 및 상기 명령 값 값을 선택할 때 유념되어야 하는지를

?

+0

목록에 있습니까? 아니면 세트? –

+0

@ KarthikeyanGopall 각 키의 목록에 값을 저장하고 있지만 세트가 내 경우에 훨씬 적합 할 것이라고 생각합니다. – Xara

+0

@RyanVincent 내 질문에 상위 7 키는 키당 정수의 개수를 나타냅니다. – Xara

답변

1

리스트 최대 밉맵-항목 512 : 리스트 MAX-zipmap 값 64

리스트의 항목 수가 512을 초과 할 경우, 또는리스트> (64)에 임의의 주어진 요소의 크기 Redis는 비효율적 인 메모리 내 스토리지 구조로 전환합니다. 보다 구체적으로, 임계 값 아래에는 지브리스트가 사용되며 위에는 링크 된 목록이 사용됩니다.

그래서 귀하의 경우 변경 사항을 보려면 항목 값 1748858을 사용해야합니다 (그리고 나서 8-end 키에만 해당). 또한 Redis가 더 작은 객체 크기로 다시 인코딩하려면 구성에서 변경을 수행하고 Redis가 자동으로 다시 인코딩되지 않으므로 Redis를 다시 시작해야합니다.

주어진 키가 ziplist와 연결된 목록을 사용하는지 확인하려면 OBJECT 명령을 사용하십시오. 자세한 내용은

는 IMO는 레디 스 '메모리 최적화를 달성 할 수

1

Redis Memory Optimization를 참조하십시오. 귀하의 경우 각 목록/세트의 항목은 약 3 백만입니다. list-max-zipmap-entries의 값을 3 백만으로 지정하면 메모리 최적화를 달성 할 수 있습니다. 레디 스의 문서는 말한다

,

이 작업은 작은 값을 매우 빠르고,하지만 당신은 훨씬 더 큰 집계 유형을 위해 특별히 인코딩 된 값을 사용하기 위해 설정을 변경하면 제안은 몇 가지 벤치 마크를 실행하는 것입니다 그리고 으로 테스트하여 변환 시간을 확인하십시오.

이 인코딩 및 디코딩은 해당 거대한 숫자에 대해 더 많은 시간/CPU를 사용합니다. 벤치 마크 테스트를 실행 한 다음 결정하는 것이 좋습니다.

키를 사용할 수 있는지 여부를 확인하기 위해이 세트 만 조회하는 경우 하나의 대안입니다. 구조를 버킷 종류의 것으로 바꿀 수 있습니다.

예를 들어 키 1로 설정 값 123456 검색하려는 경우 작동하지 않습니다 1000

참고이이

Sadd key1:bucket:123 456 

123 = 1,000분의 123,456 456 = 12만3천4백56%처럼 저장할 수 있습니다 key1의 모든 값 이 경우 1000 개 세트를 반복합니다. 마찬가지로 key1의 전체 크기에 대해 1000 개의 키를 반복해야합니다.

하지만 메모리가 약 10 배로 줄어 듭니다.