이 글은 Redis에 대한 관련 지식을 제공하며, 2계층 데이터 구조, 데이터 구조의 내부 구현, 객체 구조 등을 포함하여 객체와 관련된 문제를 주로 소개합니다. 다음은 살펴보겠습니다. 도움이 되기를 바랍니다. 모든 사람.
추천 학습: Redis 동영상 튜토리얼
Redis의 성능이 뛰어난 이유 중 하나는 각 데이터 구조가 특별히 설계되었으며 하나 또는 읽기 및 쓰기 성능을 향상시키기 위해 이러한 유연한 데이터 구조를 사용하여 더 많은 데이터 구조가 지원됩니다. Redis의 데이터 구조를 이해하려면 두 가지 다른 수준에서 논의할 수 있습니다.
첫 번째 수준은 사용자 관점입니다. 이 수준은 Redis가 다음과 같은 외부 세계에 노출하는 호출 인터페이스이기도 합니다. : 문자열, 목록, 해시, 집합, 정렬된 집합.
두 번째 수준은 내부 구현의 관점에서 볼 때 dict, sds, ziplist, Quicklist, Skiplist, intset과 같은 하위 수준 구현입니다.
Redis 사용자의 관점에서 Redis 노드에는 여러 데이터베이스가 포함됩니다(기본값은 비클러스터 모드에서 16개이고 클러스터 모드에서는 1개만 가능). 키 공간에서 객체 공간으로의 매핑 관계를 유지합니다. 이 매핑 관계의 키는 문자열 유형이며 값은 문자열, 목록, 해시, 집합, 정렬된 집합 등과 같은 여러 데이터 유형일 수 있습니다. 키 유형은 문자열로 고정되어 있지만 가능한 값 유형은 여러 개임을 알 수 있습니다.
Redis의 내부 구현 관점에서 데이터베이스 내 매핑 관계는 dict를 사용하여 유지됩니다. dict의 키가 동적 문자열 sds인 고정 데이터 구조로 표현되는 것으로 충분합니다. 값은 더 복잡합니다. 동일한 dict에 다양한 유형의 값을 저장하려면 범용 데이터 구조가 필요합니다. 이 범용 데이터 구조는 robj이고 전체 이름은 redisObject입니다.
예:typedef struct redisObject { unsigned type:4; unsigned encoding:4; unsigned lru:LRU_BITS; /* lru time (relative to server.lruclock) */ int refcount; void *ptr;} robj;A robj에는 다음 5개 필드가 포함됩니다.
OBJ_HASH. 이는 각각 Redis에서 공개하는 5가지 데이터 구조에 해당합니다.
동일한 유형이 서로 다른 인코딩에 해당할 수도 있습니다. 이는 동일한 데이터 유형이 서로 다른 내부 표현을 가질 수 있음을 의미합니다. 내부 표현이 다르면 메모리 사용량과 검색 성능이 다릅니다.
type = OBJ_STRING이면 이 robj가 문자열을 저장한다는 의미입니다. 이때 인코딩은 다음 세 가지 유형 중 하나일 수 있습니다.OBJ_ENCODING_LINKEDLIST: 이 표현도 오래된 표현이라 더 이상 사용되지 않습니다.
OBJ_ENCODING_ZIPLIST: ziplist로 표현됩니다.
OBJ_ENCODING_INTSET: intset으로 표현됩니다. 집합 데이터 구조에 사용됩니다.
OBJ_ENCODING_SKIPLIST: 스킵리스트로 표현됩니다. 정렬된 집합 데이터 구조에 사용됩니다.
OBJ_ENCODING_EMBSTR: 특수 임베디드 SD로 표현됩니다.
OBJ_ENCODING_QUICKLIST: 퀵리스트로 표현됩니다. 목록 데이터 구조에 사용됩니다.
redisObject의 역할은 다음과 같습니다.
redisObjec은 두 수준의 데이터 구조를 연결하는 브리지입니다.
여러 데이터 유형에 대한 통합 표현을 제공합니다.
경우에 따라 메모리를 최대한 절약하기 위해 동일한 유형의 데이터가 다른 내부 표현을 사용할 수 있도록 허용합니다.
객체 공유 및 참조 계산을 지원합니다. 객체가 공유되면 하나의 메모리 복사본만 사용되므로 메모리가 더욱 절약됩니다.
추천 학습: Redis 비디오 튜토리얼
위 내용은 Redis 학습 스킬의 Object에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!