분류 기타

Redis 데이타 구조 요약

컨텐츠 정보

  • 조회 310 (작성일 )

본문

Strings 


문자열은 가장 기본적인 종류의 Redis 값입니다. Redis 문자열은 바이너리에 안전합니다. 즉, Redis 문자열에는 JPEG 이미지 또는 직렬화 된 Ruby 개체와 같은 모든 종류의 데이터가 포함될 수 있습니다.

문자열 값의 길이는 최대 512MB입니다.

Redis에서 문자열을 사용하여 여러 가지 흥미로운 작업을 수행 할 수 있습니다. 예를 들면 다음과 같습니다.

  • INCR 계열 (INCR, DECR, INCRBY)의 명령을 사용하여 문자열을 원자 카운터로 사용합니다.
  • APPEND 명령을 사용하여 문자열에 추가합니다.
  • GETRANGESETRANGE와 함께 문자열을 임의 액세스 벡터로 사용합니다.
  • 적은 공간에서 많은 데이터를 인코딩하거나 GETBITSETBIT를 사용하여 Redis 지원 Bloom Filter를 만듭니다.

자세한 내용은 사용 가능한 모든 문자열 명령을 확인하거나 Redis 데이터 유형 소개를 읽어보세요.


Lists 


Redis 목록은 단순히 삽입 순서로 정렬 된 문자열 목록입니다. 목록의 머리 (왼쪽) 또는 꼬리 (오른쪽)에 새 요소를 푸시하는 Redis 목록에 요소를 추가 할 수 있습니다.

LPUSH 명령은 머리에 새 요소를 삽입하고 RPUSH는 꼬리에 새 요소를 삽입합니다. 이 작업 중 하나가 빈 키에 대해 수행되면 새 목록이 생성됩니다. 마찬가지로 목록 작업이 목록을 비우면 키 공간에서 키가 제거됩니다. 존재하지 않는 키를 인자로 사용하여 호출하면 모든 목록 명령이 빈 목록으로 호출 된 것과 똑같이 동작하기 때문에 매우 편리한 의미 체계입니다.

목록 작업 및 결과 목록의 몇 가지 예 :

LPUSH mylist a   # now the list is "a"
LPUSH mylist b   # now the list is "b","a"
RPUSH mylist c   # now the list is "b","a","c" (RPUSH was used this time)


목록의 최대 길이는 232-1 개 요소입니다 (4294967295, 목록 당 40 억 개 이상의 요소).

시간 복잡성의 관점에서 볼 때 Redis 목록의 주요 기능은 수백만 개의 항목이 삽입 된 경우에도 머리와 꼬리 근처에 있는 요소의 지속적인 시간 삽입 및 삭제를 지원하는 것입니다. 요소에 액세스하는 것은 목록의 극단 근처에서 매우 빠르지만 O (N) 작업이므로 매우 큰 목록의 중간에 액세스 하려고 하면 느립니다.

Redis 목록으로 많은 흥미로운 작업을 수행 할 수 있습니다. 예를 들면 다음과 같습니다.

  • 사용자 타임 라인에 새 요소를 추가하기 위해 LPUSH를 사용하고 최근에 삽입 된 몇 가지 항목을 검색하기 위해 LRANGE를 사용하여 소셜 네트워크에서 타임 라인을 모델링합니다.
  • LPUSHLTRIM과 함께 사용하여 주어진 요소 수를 초과하지 않고 최신 N 요소 만 기억하는 목록을 만들 수 있습니다.
  • 목록은 메시지 전달 기본 요소로 사용할 수 있습니다. 예를 들어 백그라운드 작업을 생성하기 위해 잘 알려진 Resque Ruby 라이브러리를 참조하십시오.
  • 목록으로 더 많은 작업을 수행 할 수 있습니다.이 데이터 유형은 BLPOP와 같은 차단 명령을 포함하여 여러 명령을 지원합니다.

자세한 내용은 목록에서 작동하는 사용 가능한 모든 명령을 확인하거나 Redis 데이터 유형 소개를 읽어보세요.


Sets 


Redis 세트는 정렬되지 않은 문자열 모음입니다. O (1)에서 구성원의 존재 여부를 추가, 제거 및 테스트 할 수 있습니다 (Set에 포함 된 요소 수에 관계없이 일정 시간).

Redis 세트에는 반복 멤버를 허용하지 않는 바람직한 속성이 있습니다. 동일한 요소를 여러 번 추가하면 이 요소의 단일 사본이 있는 세트가 생성됩니다. 실제로 이것은 구성원을 추가 할 때 존재 여부를 확인한 다음 작업을 추가 할 필요가 없음을 의미합니다.

Redis 세트에 대한 매우 흥미로운 점은 기존 세트에서 시작하여 세트를 계산하는 여러 서버 측 명령을 지원하므로 매우 짧은 시간에 세트의 유니온, 교차, 차이를 수행 할 수 있다는 것입니다.

한 세트의 최대 구성원 수는 232-1 개 (4294967295, 세트당 40 억 개 이상의 구성원)입니다.

Redis 세트를 사용하여 많은 흥미로운 작업을 수행 할 수 있습니다. 예를 들면 다음과 같습니다.

  • Redis 세트를 사용하여 고유 한 것을 추적 할 수 있습니다. 특정 블로그 게시물을 방문하는 모든 고유 IP 주소를 알고 싶으십니까? 페이지 보기를 처리 할 때마다 SADD를 사용하기 만하면 됩니다. 반복되는 IP는 삽입되지 않을 것입니다.
  • Redis 세트는 관계를 나타내는 데 좋습니다. 모든 태그를 나타내는 Set을 사용하여 Redis로 태그 지정 시스템을 만들 수 있습니다. 그런 다음 SADD 명령을 사용하여 특정 태그를 나타내는 Set에 지정된 태그가 있는 모든 개체의 모든 ID를 추가 할 수 있습니다. 동시에 세 개의 다른 태그를 갖는 모든 개체의 모든 ID를 원하십니까? SINTER를 사용하십시오.
  • 세트를 사용하여 SPOP 또는 SRANDMEMBER 명령을 사용하여 임의로 요소를 추출 할 수 있습니다.

평소처럼 자세한 내용은 Set 명령의 전체 목록을 확인하거나 Redis 데이터 유형 소개를 읽어보세요.


Hashes 


Redis Hashes는 문자열 필드와 문자열 값 사이의 맵이므로 객체를 나타내는 데 완벽한 데이터 유형입니다 (예 : 이름, 성, 나이 등과 같은 여러 필드가 있는 사용자).


HMSET user:1000 username antirez password P1pp0 age 34
HGETALL user:1000
HSET user:1000 password 12345
HGETALL user:1000


몇 개의 필드가 있는 해시는 공간을 거의 차지하지 않는 방식으로 저장되므로 작은 Redis 인스턴스에 수백만 개의 개체를 저장할 수 있습니다.

해시는 주로 객체를 나타내는 데 사용되지만 많은 요소를 저장할 수 있으므로 다른 많은 작업에도 해시를 사용할 수 있습니다.

모든 해시는 최대 232-1 개의 필드 값 쌍 (40 억 개 이상)을 저장할 수 있습니다.

자세한 내용은 Hash 명령의 전체 목록을 확인하거나 Redis 데이터 유형 소개를 읽어보세요.


Sorted sets 


Redis Sorted Sets는 Redis Sets와 유사하게 반복되지 않는 문자열 모음입니다. 차이점은 정렬 된 집합의 모든 구성원이 가장 작은 점수에서 가장 큰 점수로 정렬 된 집합을 정렬하는 데 사용되는 점수와 관련되어 있다는 것입니다. 회원은 고유하지만 점수는 반복 될 수 있습니다.

정렬 된 세트를 사용하면 매우 빠르게 요소를 추가, 제거 또는 업데이트 할 수 있습니다 (요소 수의 로그에 비례하는 시간에). 요소는 순서대로 취해지고 나중에 순서가 지정되지 않기 때문에 점수 또는 순위 (위치)별로 범위를 매우 빠르게 얻을 수도 있습니다. 정렬 된 집합의 중간에 액세스하는 것도 매우 빠르기 때문에 정렬 된 집합을 반복되지 않는 요소의 스마트 목록으로 사용하여 필요한 모든 요소에 빠르게 액세스 할 수 있습니다. 순서대로 요소, 빠른 존재 테스트, 중간에 있는 요소에 대한 빠른 액세스 !

간단히 말해, 정렬 된 세트를 사용하면 다른 종류의 데이터베이스에서 모델링 하기 정말 어려운 뛰어난 성능으로 많은 작업을 수행 할 수 있습니다.

정렬 된 세트를 사용하여 다음을 수행 할 수 있습니다.

  • 새로운 점수가 제출 될 때마다 ZADD를 사용하여 업데이트하는 대규모 온라인 게임에서 리더 보드를 가져옵니다. ZRANGE를 사용하여 상위 사용자를 쉽게 확보 할 수 있으며, 사용자 이름이 주어지면 ZRANK를 사용하여 목록에서 순위를 반환 할 수도 있습니다. ZRANK와 ZRANGE를 함께 사용하면 주어진 사용자와 유사한 점수를 가진 사용자를 표시 할 수 있습니다. 모두 매우 빠르게.
  • 정렬 된 집합은 Redis 내부에 저장된 데이터를 인덱싱 하기 위해 자주 사용됩니다. 예를 들어 사용자를 나타내는 해시가 많은 경우 사용자의 연령을 점수로, 사용자의 ID를 값으로 갖는 요소가 있는 정렬 된 집합을 사용할 수 있습니다. 따라서 ZRANGEBYSCORE를 사용하면 주어진 연령 간격으로 모든 사용자를 검색하는 것이 간단하고 빠릅니다.

정렬 된 집합은 아마도 가장 진보 된 Redis 데이터 유형일 것이므로 정렬 된 집합 명령의 전체 목록을 확인하여 Redis로 무엇을 할 수 있는지 알아보십시오! 또한 Redis 데이터 유형에 대한 소개를 읽을 수 있습니다.


Bitmaps and HyperLogLogs 


Redis는 또한 실제로 String 기본 유형을 기반으로 하지만 고유 한 의미를 갖는 데이터 유형 인 Bitmap 및 HyperLogLog를 지원합니다.

이러한 유형에 대한 정보는 Redis 데이터 유형 소개를 참조하십시오.


https://redis.io/topics/data-types