Redis 데이터 구조의 String 유형에 대해 이야기해 보겠습니다.

青灯夜游
풀어 주다: 2021-12-08 09:53:51
앞으로
1928명이 탐색했습니다.

이 글은 Redis 데이터 구조의 문자열 유형을 이해하고 Redis의 KV 스토리지 구조에 대해 이야기하는 데 도움이 되기를 바랍니다.

Redis 데이터 구조의 String 유형에 대해 이야기해 보겠습니다.

Redis는 분산형 KV 캐시로 많이 사용되는데, 그 이면에 알려지지 않은 비밀이 많다는 사실을 모르는 분들이 많습니다. [관련 권장사항: Redis 동영상 튜토리얼]

String type

String은 Redis에서 지원하는 가장 기본적인 데이터 유형입니다. 먼저 String의 데이터 구조와 저장 방식을 살펴보겠습니다.

문자열을 저장하도록 SDS 재정의

우리 모두 알고 있듯이 redis는 c 언어로 작성되었으며, c 언어에는 문자열 유형이 없고 char[]만 있으며 초기화 시 크기를 지정해야 합니다. incr 명령, 추가 명령 등 동적 추가 및 확장과 같은 기능을 구현하기 위해 redis에서는 이러한 기능을 구현하기 위한 SDS(Simple Dynamic String)를 정의하고 유지 관리합니다.

먼저 Redis 소스 코드에 정의된 데이터 구조를 살펴보겠습니다. 여기에는 공간을 절약하기 위한 5가지 유형이 있습니다.

Redis 데이터 구조의 String 유형에 대해 이야기해 보겠습니다.

1. char[]의 길이를 얻으려면 배열을 순회해야 합니다. len(char[])의 시간 복잡도는 O(n)입니다. C 언어에서는 char[]만 입력하고 char[]는 미리 할당된 길이를 가지며 데이터가 증가한 후에 확장해야 합니다. falgs: 항상 1바이트를 차지합니다. 가장 낮은 3비트는 헤더 유형을 나타내는 데 사용됩니다. 헤더에는 5가지 유형이 있으며, sds.h에는 상수 정의가 있습니다.
4.buf[]: C 언어의 문자 배열, '를 사용하세요.

Redis의 KV 저장 구조

redis에서는 모든 저장 공간이 KV 키-값 쌍의 형태로 저장됩니다. K는 문자열 유형이며, V는 문자열, 목록, 해시 등일 수 있습니다. 지원되는 데이터 구조) V는 특정 유형으로 직접 설정되지 않지만 redisObject 레이어로 캡슐화됩니다. 실제 저장된 데이터 구조는 ptr 포인터에 의해 구체적으로 가리킵니다.

그리고 공간을 더 잘 절약하기 위해 redis는 또한 Long 유형의 정수가 저장되면 RedisObject의 포인터가 정수 데이터에 직접 할당되므로 추가 포인터가 필요하지 않습니다. . 다시 정수를 가리키며 포인터의 공간 오버헤드를 절약합니다. 반면에 문자열 데이터가 저장되고 문자열이 44바이트 이하인 경우 RedisObject의 메타데이터, 포인터 및 SDS는 연속적인 메모리 영역이므로 메모리 조각화를 방지합니다. 이 레이아웃 방법은 embstr 인코딩 방법이라고도 합니다. 물론 문자열이 44바이트보다 커지면 SDS 데이터의 양이 증가하기 시작하고 Redis는 더 이상 SDS와 RedisObject를 함께 레이아웃하지 않고 대신 SDS에 독립적인 공간을 할당하고 SDS 구조를 가리키는 포인터를 사용합니다. 이 레이아웃 방법을 원시 인코딩 모드라고 합니다. 그림과 같이

Redis 데이터 구조의 String 유형에 대해 이야기해 보겠습니다.

  • embstr 인코딩
    은 짧은 문자열을 저장하고 일회성 메모리 할당을 합니다.
    읽기 전용이므로 내용이 수정되면 원시 인코딩이 됩니다(44자를 초과하지 않더라도 bytes) ;
  • raw 인코딩
    은 메모리 공간을 여러 번 할당하여 44바이트보다 큰 긴 문자열을 저장할 수 있습니다.

raw 기본 SDS 문자 길이가 44자 미만으로 줄어들면 embstr 인코딩으로 반전되나요?
아니요. Redis의 기본 인코딩은 변환 후에 되돌릴 수 없습니다(롤백 없음).

요약

redis는 일반적으로 사용되는 캐싱 미들웨어입니다. 이를 사용할 때 보다 적절한 데이터 구조와 메모리 추정을 선택할 수 있도록 데이터 구조와 스토리지를 명확하게 이해해야 합니다.

redis 메모리 계산 주소 http://www.redis.cn/redis_memory/

더 많은 프로그래밍 관련 지식을 보려면 프로그래밍 입문을 방문하세요! !

위 내용은 Redis 데이터 구조의 String 유형에 대해 이야기해 보겠습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:juejin.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿