Redis는 값을 가리키는 키를 저장합니다. 키는 합리적인 크기의 이진 값일 수 있습니다 (가독성 및 디버깅 목적으로 짧은 ASCII 문자열을 사용하는 것이 좋습니다). 값은 5 가지 기본 Redis 데이터 유형 중 하나입니다.
1.strings-최대 512MB의 이진 안전 바이트 시퀀스
2. 해시 — 키 값 쌍의 모음
3.lists — 삽입 순서의 문자열 모음
4.sets — 순서가없는 고유 한 문자열 모음
5. 정렬 세트 — 사용자 정의 점수에 따라 주문 된 고유 한 문자열 모음
현
Redis 문자열은 일련의 바이트입니다.
Redis의 문자열은 바이너리 안전 (특별한 종료 문자에 의해 알려진 길이가 아님)을 의미하므로 한 문자열에 최대 512MB를 저장할 수 있습니다.
문자열은 표준 "키 값 저장소"개념입니다. 키와 값이 모두 텍스트 또는 이진 문자열 인 값을 가리키는 키가 있습니다.
문자열에 대한 모든 가능한 작업은 http://redis.io/commands/#string을 참조하십시오.
해시
Redis 해시는 키 값 쌍의 모음입니다.
Redis 해시는 많은 키 값 쌍을 보유하며 각 키와 값은 문자열입니다. Redis 해시는 복잡한 값을 직접 지원하지 않습니다 (즉, 해시 필드에 목록 또는 세트 값 또는 다른 해시 값을 가질 수 없음). 그러나 해시 필드를 사용하여 다른 최상위 복합 값을 가리킬 수 있습니다. 해시 필드 값에서 수행 할 수있는 유일한 특수 작업은 숫자 내용의 원자 단위 증감입니다.
Redis 해시는 직접 객체 표현과 많은 작은 값을 컴팩트하게 저장하는 방법으로 생각할 수 있습니다.
직접 객체 표현은 이해하기 쉽습니다. 객체에는 이름 (해시 키)과 값이있는 내부 키 모음이 있습니다. 예를 보려면 아래 예를 참조하십시오.
해시를 사용하여 많은 작은 값을 저장하는 것은 영리한 Redis 대규모 데이터 저장 기술입니다. 해시에 적은 수의 필드 (~ 100)가있는 경우 Redis는 전체 해시의 저장 및 액세스 효율성을 최적화합니다. Redis의 작은 해시 스토리지 최적화는 흥미로운 동작을 발생시킵니다. 문자열 값을 가리키는 10,000 개의 최상위 레벨 키를 가지지 않고 각각 100 개의 내부 키와 값을 갖는 100 개의 해시를 갖는 것이 더 효율적입니다. 이 방법으로 Redis 해시를 사용하여 데이터 스토리지를 최적화하려면 데이터가 끝나는 위치를 추적하는 데 추가 프로그래밍 오버 헤드가 필요하지만 데이터 스토리지가 주로 문자열 기반 인 경우이 이상한 트릭을 사용하여 많은 메모리 오버 헤드를 절약 할 수 있습니다.
해시에 대한 모든 가능한 작업은 해시 문서를 참조하십시오.
기울기
Redis 목록은 연결된 목록처럼 작동합니다.
목록의 머리 또는 꼬리에서 목록을 삽입, 삭제 및 탐색 할 수 있습니다.
값을 삽입 한 순서대로 유지해야 할 때 목록을 사용하십시오. Redis는 필요한 경우 임의의 목록 위치에 삽입 할 수있는 옵션을 제공하지만 시작 위치에서 멀리 삽입하면 삽입 성능이 저하됩니다.
Redis 목록은 종종 생산자 / 소비자 대기열로 사용됩니다. 목록에 항목을 삽입 한 다음 목록에서 항목을 팝업하십시오. 소비자가 요소가없는 목록에서 팝업을 시도하면 어떻게됩니까? Redis에 요소가 나타날 때까지 기다렸다가 추가되면 즉시 요소를 반환하도록 요청할 수 있습니다. 이는 Redis를 실시간 메시지 대기열 / 이벤트 / 작업 / 작업 / 알림 시스템으로 만듭니다.
목록 끝에서 요소를 원자 적으로 제거하여 목록을 스택 또는 대기열로 취급 할 수 있습니다.
삽입 할 때마다 목록을 특정 크기로 자르면 고정 길이 목록 (캡 모음)을 유지할 수도 있습니다.
목록에서 가능한 모든 작업은 목록 문서를 참조하십시오.
세트
Redis 세트는 세트입니다.
Redis 세트에는 각 문자열이 세트당 한 번만 존재하는 순서가없는 고유 한 Redis 문자열이 포함됩니다. 동일한 요소를 세트에 10 번 추가하면 한 번만 표시됩니다. 세트는 중복 요소가 누적되어 공간을 낭비하지 않고 적어도 한 번 이상 존재하는 것을 게으르게 보장하는 데 좋습니다. 이미 존재하는지 확인하지 않고도 원하는만큼 동일한 문자열을 추가 할 수 있습니다.
세트는 세트에서 멤버의 멤버쉽 확인, 삽입 및 삭제에 빠릅니다.
세트는 예상 한대로 효율적인 세트 작업을 수행합니다. 한 번에 여러 집합의 합집합, 교집합 및 차이를 취할 수 있습니다. 결과를 발신자에게 반환하거나 나중에 사용할 수 있도록 결과를 새 세트에 저장할 수 있습니다.
세트는 멤버십 확인 (목록과 달리)에 대한 일정한 시간 액세스 권한을 가지며, Redis는 편리한 무작위 멤버 제거 및 리턴 ( "세트에서 임의의 요소를 팝")하거나 대체하지 않고 리턴하는 임의 멤버를 갖습니다 ( "임의의 30 명의 고유 한 사용자 30 명 제공" ") 또는 교체 ("7 장의 카드를 주지만, 선택한 후에는 다시 샘플링 할 수 있도록 카드를 다시 넣습니다 ").
세트에서 가능한 모든 조작은 sets docs를 참조하십시오 .
정렬 된 세트
Redis 정렬 세트는 사용자 정의 순서가있는 세트입니다.
간단하게 정렬 된 집합을 고유 한 요소가있는 이진 트리로 생각할 수 있습니다. Redis 정렬 세트는 실제로 스킵 목록 입니다. 요소의 정렬 순서는 각 요소의 점수에 의해 정의됩니다.
정렬 된 세트는 여전히 세트입니다. 요소는 세트에서 한 번만 나타날 수 있습니다. 고유성을 위해 요소는 문자열 내용으로 정의됩니다. 정렬 점수가 3 인 "apple"요소를 삽입 한 다음 정렬 점수가 500 인 "apple"요소를 삽입하면 정렬 된 세트에 정렬 점수가 500 인 하나의 "apple"요소가 생성됩니다. 세트는 (스코어, 데이터) 쌍이 아닌 데이터를 기반으로 한 고유 한 것입니다.
데이터 모델이 고유성에 대한 요소의 점수가 아닌 문자열 내용에 의존하는지 확인하십시오. 점수는 반복 될 수 있지만 (또는 0), 마지막으로 세트 요소는 정렬 된 세트당 한 번만 존재할 수 있습니다. 예를 들어, 로그인의 신기원과 사용자 ID 값을 점수화하여 모든 사용자 로그인의 히스토리를 정렬 된 세트로 저장하려고하면 모든 사용자의 마지막 로그인 신기원 만 저장하게됩니다. 세트는 원하는 크기의 userbase * 로그인이 아닌 userbase 크기로 커집니다.
요소가 점수와 함께 세트에 추가됩니다. 언제든지 요소의 점수를 업데이트 할 수 있으며 새 점수로 요소를 다시 추가하기 만하면됩니다. 점수는 부동 소수점 배가로 표시되므로 필요한 경우 고정밀 타임 스탬프의 세분성을 지정할 수 있습니다. 여러 요소가 같은 점수를 가질 수 있습니다.
몇 가지 다른 방식으로 요소를 검색 할 수 있습니다. 모든 것이 정렬되었으므로 가장 낮은 점수에서 시작하는 요소를 요청할 수 있습니다. 최고 점수에서 시작하는 요소를 요청할 수 있습니다 ( "역순"). 정렬 점수를 기준으로 자연 또는 역순으로 요소를 요청할 수 있습니다.
정렬 된 집합에 대한 모든 가능한 작업은 정렬 된 집합 문서를 참조하십시오 .