두 시나리오에서 redis의 메모리 크기를 계산하려고했습니다.해시 맵과 문자열 키의 Redis 메모리 최적화
는시나리오 1 :이 시나리오에서
String commonString = "Test";
long commonId = 1234567890L;
int size = 0;
for(int i = 1; i <= 100; i++)
{
jedis.hset((commonString+"_"+commonId).getBytes(),SafeEncoder.encode("KEY_"+i),("Value_"+i).getBytes());
}
DebugParams debugParams = DebugParams.OBJECT(commonString+"_"+commonId);
String debugged = jedis.debug(debugParams);
size = Integer.parseInt(debugged.split(":")[4].split(" ")[0]);
,이 925 바이트를 얻어이 시나리오에서는
String commonString = "Test";
long commonId = 1234567890L;
int size = 0;
for(int i = 1; i <= 100; i++)
{
jedis.set((commonString+"_"+commonId+"_KEY_"+i).getBytes(),("Value_"+i).getBytes());
DebugParams debugParams = DebugParams.OBJECT(commonString+"_"+commonId+"_KEY_"+i);
size += Integer.parseInt(debugged.split(":")[4].split(" ")[0]);
}
은 크기가 892 바이트
시나리오 2
이다.Redis 2.2 이후 많은 데이터 유형이 특정 크기까지 더 적은 공간을 사용하도록 최적화되었습니다. 해시, 목록, 정수로 구성된 집합 및 정렬 된 집합 (주어진 요소 수보다 작고 최대 요소 크기까지)은 메모리를 최대 10 배나 적게 사용하는 매우 효율적인 방식으로 인코딩됩니다 (5 시간 절약 적은 메모리 사용 평균 저장).
나는이 최적화를 시도했지만 그것을 성취하지 못했습니다. 구성은 기본 구성입니다. 무엇이 잘못되었을 수 있습니까?
편집 인포의
시나리오 1 시나리오 1에서
String commonString = "Test";
long commonId = 1234567890L;
jedis.flushAll();
String info1 = jedis.info();
for(int i = 1; i <= 75; i++)
{
jedis.set(commonString+"_"+commonId+"_KEY_"+i, "VALUE_"+i);
}
String info2 = jedis.info();
사용 메모리 "used_memory : 844640"이고, 정보 2에 사용 된 메모리 것은 "852,176 used_memory"이다. 따라서 info2와 info1의 차이는 7536 바이트입니다.
시나리오 2 시나리오 2에서
String commonString = "Test";
long commonId = 1234567890L;
jedis.flushAll();
String info1 = jedis.info();
for(int i = 1; i <= 75; i++)
{
jedis.hset(commonString+"_"+commonId,"KEY_"+i,"VALUE_"+i);
}
String info2 = jedis.info();
, 인포에서 사용되는 메모리가 "used_memory : 845576"이고, 정보 2에서 사용하는 메모리 "847,208 used_memory"이다. 따라서 info2와 info1의 차이는 1632 바이트입니다.
정확하게 평가 했습니까? 당신이 문서에 대한 DEBUG OBJECT
를 참조하면
나는 redis-3.2.8을 사용하고 있습니다. 시나리오 1과 시나리오 2에서 취한 정확한 메모리를 어떻게 알 수 있습니까? –
1) 다시 설정 재설정 2) INFO 메모리에서 기준선 가져 오기 3) 상당한 양의 동일한 키 만들기 4) 다른 판독 값 가져 오기 5) 각 실험마다 반복하고 비교하십시오. 부정확하지만 v4 이전에 할 수있는 최선의 방법. –
편집 된 버전이 맞습니까? –