이 문서에서는 일관된 해싱 및 해시 슬롯과 관련된 문제를 주로 소개하는 Redis에 대한 관련 지식을 제공합니다. 확장이 발생하거나 노드가 손실되면 많은 데이터 마이그레이션 문제가 발생하고 해시 및 해시 슬롯이 발생할 수 있습니다. 이 문제가 모든 사람에게 도움이 되기를 바랍니다.
추천 학습: Redis 학습 튜토리얼
이제 x개의 캐시 장치가 있는 경우 데이터를 넣을 캐시 장치를 결정할 때 %x 키를 입력할 수 있지만 확장이 발생하거나 노드가 손실되면 키%(x±y)가 필요하므로 많은 데이터 마이그레이션 문제가 발생합니다. 일관된 해싱 및 해시 슬롯을 사용하면 이 문제를 피할 수 있습니다.
일반적인 해시는 서버 수의 나머지 부분을 가져오는 것입니다. 일관된 해시는 서버 수에 따라 변경되지 않습니다. , 서버의 IP 또는 기타를 비교하여 고유 식별자의 나머지 부분을 사용하여 값을 얻습니다. 이 값은 해시 링에서 서버의 위치입니다. 그런 다음 서버에 배치될 개체를 해시하여 값을 얻습니다. 해시를 변경하여 해당 서버를 찾습니다. 값이 있는 위치에 서버가 없는 경우 서버가 저장소를 찾을 수 있는 위치를 살펴보세요.
일반적으로 사용되는 해시 알고리즘에 따라 2의 32승 노드 공간, 즉 0~(2~32)-1의 디지털 공간에 해당 키를 해시합니다. 우리는 이것을 꼬리를 물고 닫힌 고리를 형성하는 것으로 생각할 수 있습니다.
이제 링이 있으므로 서버의 IP 주소를 기반으로 번호와 기타 고유 식별자를 얻을 수 있습니다. , 해시를 가져와 링에 올려 놓습니다.
데이터를 서버에 올려야 할 경우 먼저 데이터의 해시 값을 계산한 다음 나머지 값에 해당 값이 있으면 나머지를 가져와야 합니다. 링에 존재하지 않으면 서버가 직접 입력합니다.
결국 data1은 redis1에 있고 data2는 redis2에 있습니다. 데이터를 얻을 때에도 동일한 프로세스를 수행하고 키의 해시 값을 계산한 다음 동일한 규칙에 따라 저장된 서버를 얻습니다.
지금 Redis 노드가 중단되면 다른 노드의 데이터는 그대로 유지되며 원래 노드의 데이터는 다음 노드로 재배포됩니다.
새로운 서버 RedisNeo를 환경에 추가하고 해시 알고리즘을 통해 RedisNeo를 링에 매핑한 후 시계 방향 마이그레이션 규칙을 따르면 Redis2와 RedisNeo 사이의 이전 해시 값을 가진 데이터가 RedisNeo로 마이그레이션됩니다(그림 참조). 아래) RedisNeo는 Redis2 옆에 있으며 다른 객체는 여전히 원래 저장 위치를 유지합니다. 일관된 해시 알고리즘은 노드 추가 및 삭제 분석을 통해 데이터 마이그레이션을 최소화하면서 단조성을 유지하며 분산 클러스터에 매우 적합하며 대량의 데이터 마이그레이션을 방지하여 서버에 대한 부담을 줄입니다.
따라서 redisNeo가 추가된 후 data3은 redisNeo로 이동됩니다.
지금까지는 일관된 해싱이 완료되었다고 볼 수 있지만 아직 해결해야 할 문제가 하나 있는데 바로 밸런스입니다. 아래 그림을 보면 서버 노드가 상대적으로 적을 때 문제가 발생한다는 것을 알 수 있습니다. 즉, 필연적으로 하나의 노드에 많은 양의 데이터가 집중된다는 것입니다. 1과 다른 하나가 10이면 매우 어려울 것입니다. [2,10] 사이의 해시 값을 가진 노드만 노드 10으로 이동하고 나머지는 모두 노드 1로 이동하기 때문입니다. 노드 1. 이러한 데이터 왜곡 문제를 해결하기 위해 일관된 해싱 알고리즘은 가상 노드 메커니즘을 도입합니다. 즉, 각 서비스 노드에 대해 여러 개의 해시를 계산하고 각 계산 결과 위치에 하나의 서비스 노드를 배치합니다. 가상 노드. 구체적인 방법은 먼저 각 물리적 노드와 연결된 가상 노드 수를 결정한 다음 IP 또는 호스트 이름 뒤에 숫자를 추가하는 것입니다. 동시에 가상 노드 매핑을 제외하고 데이터 위치 지정 알고리즘은 변경되지 않습니다. 실제 노드에.
해시 슬롯은 Redis 클러스터 클러스터 체계에서 사용됩니다. Redis 클러스터 클러스터는 일관된 해시 체계를 사용하지 않지만 데이터 저장 및 읽기를 위해 데이터 샤딩에 해시 슬롯을 사용합니다. Redis 클러스터는 데이터 저장 및 데이터 읽기를 위해 데이터 샤드의 해시 슬롯을 사용합니다. Redis 클러스터에는 총 2^14(16384)개의 슬롯이 있습니다. 모든 마스터 노드에는 0~1000과 같은 슬롯 영역이 있습니다. 슬롯 수는 마이그레이션될 수 있습니다. 마스터 노드의 슬레이브 노드는 슬롯을 할당하지 않고 읽기 권한만 갖습니다. 그러나 코드에서 Redis 클러스터는 마스터 노드에서 읽기 및 쓰기 작업을 수행합니다. 읽기를 위한 슬레이브 노드가 아니며 쓰기를 위한 마스터 노드가 아닙니다. Redis 클러스터가 처음 생성되면 16384개의 슬롯이 마스터 노드에 의해 균등하게 분배됩니다.
일관된 해싱과 비교하여 확장 및 축소 시 해시 슬롯을 수동으로 할당해야 하며, 마스터 노드를 삭제할 때 해당 슬레이브 노드와 해시 슬롯을 다른 마스터 노드에 제공해야 합니다. 해시 슬롯이 어느 슬롯에 속하는지 결정합니다. CRC-16(key)%16384 값을 기준으로 합니다.
추천 학습: Redis 튜토리얼
위 내용은 일관된 해시 및 해시 슬롯을 학습하는 Redis 캐시의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!