>데이터 베이스 >Redis >Redis의 데이터 구조 및 데이터 운용에 대한 상세한 분석

Redis의 데이터 구조 및 데이터 운용에 대한 상세한 분석

coldplay.xixi
coldplay.xixi앞으로
2021-02-08 16:20:072273검색

Redis의 데이터 구조 및 데이터 운용에 대한 상세한 분석

권장(무료): redis

Redis가 마이크로초 수준에서 데이터 작업을 완료할 수 있는 데는 두 가지 주요 이유가 있습니다. Redis가 뛰어난 성능을 발휘할 수 있는 이유는 다음과 같습니다.

  • Redis는 메모리 내 데이터베이스입니다. 모든 작업은 메모리에서 완료되며 메모리 액세스 속도 자체가 매우 빠릅니다.
  • Redis는 효율적인 데이터 유형과 데이터 구조를 가지고 있습니다.

키에서 값으로 빠르게 액세스하기 위해 Redis는 해시 테이블을 사용하여 키-값 쌍을 저장합니다. 해시 버킷의 항목은 값이 집합인 경우에도 포인터를 저장합니다. 값 포인터도 사용할 수 있습니다.

해시 테이블에 데이터가 많아지면 해시 충돌이 발생합니다. 즉, 여러 키의 해시 값이 동일한 해시 버킷에 해당할 수 있습니다. Redis는 체인 해싱을 사용하여 해시 충돌을 해결합니다. 즉, 동일한 해시 버킷의 여러 요소가 연결 목록에 저장되고 요소가 포인터로 차례로 연결됩니다.

해시 충돌이 많아지면 해시 충돌 체인이 너무 길어져 요소를 찾는 데 시간이 오래 걸리고 효율성이 낮아집니다. 이 문제를 해결하기 위해 Redis는 해시 테이블을 다시 해시하여 여러 항목 요소를 분산된 방식으로 저장함으로써 단일 해시 버킷의 요소 수를 줄여 단일 버킷에서의 충돌을 줄입니다.

Redis는 효율적인 rehash를 위해 기본적으로 두 개의 전역 해시 테이블을 사용합니다. 처음에는 해시 테이블 1이 기본으로 사용되며, 해시 테이블 2는 데이터가 계속해서 증가할 때 다음 단계를 통해 rehash를 수행합니다.

  1. 해시 테이블 2에 더 큰 공간을 할당합니다
  2. 해시 테이블 1의 데이터를 해시 테이블 2에 복사합니다
  3. 해시 테이블 1의 공간을 해제하고 다음 재해시 확장을 위해 예약합니다

그러나 2단계에서 대량의 데이터가 한 번에 복사되면 Redis 스레드가 차단되어 다른 요청을 처리할 수 없습니다. 따라서 Redis는 요청이 처리될 때마다 이 인덱스 위치의 모든 항목이 복사된다는 의미인 점진적 재해시를 사용합니다.

String 형식의 값은 해시 버킷을 찾은 후 바로 CRUD 작업을 수행할 수 있습니다. 세트의 경우 전역 해시 테이블을 통해 해당 해시 버킷을 찾은 후 세트에서 CRUD를 수행합니다. 컬렉션의 작업 효율성은 기본 데이터 구조 및 작업 복잡성과 관련이 있습니다.

  1. 단일 요소 연산이 기본이며 연산 복잡도는 O(1)입니다.
    • Hash: HGET, HSET, HDEL
    • 세트 유형 SADD, SREM, SRANDMEMBER 등
  2. 범위 연산은 시간이 많이 걸리고 연산 복잡도는 O(N)입니다.
    • HGETALL;
    • Set: SMEMBERS;
    • List: LRANGE
    • ZSet: ZRANGE
  3. 통계 작업은 일반적으로 작업 복잡도가 O(1)입니다.
  4. 몇 가지 예외가 있으며 작업 복잡도는 O(1)입니다.
    • 목록: LPOP, RPOP, LPUSH, RPUSH

위 내용은 Redis의 데이터 구조 및 데이터 운용에 대한 상세한 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제