중화사전망 - 자전 검색 - Redis 5 가지 객체 유형

Redis 5 가지 객체 유형

이전 문장 에서는 Redis 의 6 가지 데이터 구조 (SDS, 양방향 링크 테이블, 사전, 점프 테이블, 압축 테이블 및 정수 세트) 를 소개했습니다. Redis 는 이러한 데이터 구조를 기반으로 문자열 객체, 목록 객체, 해시 객체, 컬렉션 객체 및 정렬된 컬렉션 객체의 다섯 가지 객체 유형을 포함하는 객체 시스템을 만듭니다.

객체 정의:

각 객체 유형에는 최소한 두 가지 다른 인코딩 (데이터 구조) 구현이 있습니다.

우리는 주로 다른 유형의 객체가 있기 때문에 GET, TTL, EXPIRE 등과 같은 다양한 객체에 일부 명령을 사용할 수 있다는 것을 알고 있습니다. , 나머지는 특정 유형에만 사용할 수 있습니다.

특정 명령 유형의 경우 먼저 redisObject.type 필드를 검사하여 특정 유형을 확인합니다.

이러한 일반적인 유형의 명령은 유형 다형성을 통해 구현됩니다. 즉, 서로 다른 메서드는 서로 다른 유형의 객체에 명령을 구현하는 데 사용됩니다. 명령을 사용할 때는 객체 유형에 따라 사용할 함수를 결정하기만 하면 됩니다. 이것이 다형성입니다.

Type 객체에는 참조될 때마다+1 을 계산하고 취소될 때마다-1 을 계산하는 개수 필드 refcount 가 있습니다. 이 메커니즘을 통해 적절한 시기에 메모리 재확보를 실현할 수 있다. 참조 개수를 통해 메모리를 회수하는 방법입니다.

Redis 에서는 기본적으로 0 에서 9999 사이의 숫자 데이터가 메모리에서 공유됩니다. 즉, 메모리에는 이러한 오브젝트가 하나뿐이므로 다른 사용 위치에서만 가리키면 됩니다.

Q: Redis 가 정수 값 객체 만 즐기는 이유는 무엇입니까?

A: * * * 공유 객체를 사용할 때 객체가 * * * 공유 객체와 일치하는지 확인해야 합니다. 데이터가 복잡할수록 복잡성이 높아집니다. 정수 값 검증 연산의 복잡성은 o (1) 입니다. 문자열 검증 작업의 복잡성은 o (n) 입니다. 목록 또는 해시와 같이 여러 값이 있는 객체를 검증할 때 복잡성은 O(N? ) 을 참조하십시오. CPU 를 절약하기 위해 이러한 제한이 적용됩니다.

RedisObject.lru 속성은 마지막으로 액세스한 시간을 기록합니다. 객체 IDLETIME XXX 의 명령을 통해 이 요소 (curTime-lru) 에 액세스하지 않은 기간을 확인할 수 있습니다. 명령 자체는 LRU 를 업데이트하지 않습니다.