Redis에서는 간단한 데이터 구조 만 사용할 수 있으며 CouchDB 또는 MongoDB와 같은 문서 지향 데이터베이스와 마찬가지로 값으로 구성 할 수 없습니다. 그러나 참조로 데이터 구조를 구성하는 것이 가능하며 이는 매우 일반적인 패턴입니다.
예를 들어 집합에 포함 된 항목은 다른 개체 (목록, 해시 테이블, 다른 집합 등)의 키일 수 있습니다. 이것을 귀하의 예에 적용 해 보겠습니다.
고객과 device + port 간의 관계를 모델링하려면 고객 ID가 포함 된 세트를 사용할 수 있습니다. 고객에 대한 정보를 저장하려면 고객 당 하나의 해시 테이블이 좋습니다. ID 장치와 포트로의
하자 연관이 :의
sadd d:Los_Angeles:11 2 3
주요 여기
은 고객입니다 : C 이러한 기록의
hmset c:1 name Smith protocol tcp snmp_dest 127.0.0.1 syslog_dest 127.0.0.2
hmset c:2 name Jackson protocol udp snmp_dest 127.0.0.1 syslog_dest 127.0.0.2
hmset c:3 name Davis protocol tcp snmp_dest 127.0.0.3 syslog_dest 127.0.0.4
키입니다 이 세트는 d : device : port입니다. c : 및 d : 접두사는 단지 규칙입니다. 장치/포트별로 하나의 세트를 만들어야합니다. 주어진 고객은 여러 세트에 속할 수 있으므로 여러 장치/포트와 연관 될 수 있습니다.
이제이 기기/포트에 연결된 배송 방법을 사용하는 고객을 찾으려면 세트의 콘텐츠를 검색하기 만하면됩니다. 그런 다음 해당 고객 정보가 hgetall 명령의 수를 파이프 라이닝하여 검색 할 수 있습니다
smembers d:Los_Angeles:11
1) "2"
2) "3"
:
hgetall c:2
hgetall c:3
1) "name"
2) "Jackson"
3) "protocol"
4) "udp"
5) "snmp_dest"
6) "127.0.0.1"
7) "syslog_dest"
8) "127.0.0.2"
1) "name"
2) "Davis"
3) "protocol"
4) "tcp"
5) "snmp_dest"
6) "127.0.0.3"
7) "syslog_dest"
8) "127.0.0.4"
명령의 수를 두려워하지 마십시오. 이들은 매우 빠르며 대부분의 Redis 클라이언트는 최소 왕복 횟수 만 필요하도록 쿼리를 파이프 라인 처리 할 수 있습니다. 한 명의 스먼트 멤버와 여러 명의 hgetall을 사용하면이 문제는 단지 두 번의 왕복으로 해결할 수 있습니다.
이제 유비 쿼터스 SORT 명령 덕분에 비트를 더 최적화 할 수 있습니다. 이것은 아마도 레디 스에서 가장 복잡한 명령 일 것입니다. 여기서는 왕복을 저장하는 데 사용할 수 있습니다.
sort d:Los_Angeles:11 by nosort get c:*->name get c:*->protocol get c:*->snmp_dest get c:*->syslog_dest
1) "Jackson"
2) "udp"
3) "127.0.0.1"
4) "127.0.0.2"
5) "Davis"
6) "tcp"
7) "127.0.0.3"
8) "127.0.0.4"
한 명령에서 장치/포트 세트의 내용을 검색하고 해당 고객 정보를 가져옵니다.
이 예제는 간단하지만 더 일반적으로 Redis를 사용하여 복잡한 데이터 구조를 나타낼 수는 있지만 즉각적인 것은 아닙니다. 구조와 데이터 액세스 측면에서 모델을 신중하게 생각해야합니다 (예 : 디자인 타임에 데이터 및 사례를 활용하십시오).
Redis Hash를 살펴 보셨습니까? 예를 들어 hmset/hmget을 사용하면 ID를 나타낼 수있는 단일 키와 여러 '필드'를 연결할 수 있습니다. http://openmymind.net/2012/1/23/The-Little-Redis-Book/ - Redis Book에는 좋은 예가 있습니다. – Alex
나는 실제로 HMSET/HMGET을 보지 못했다. 이 튜토리얼을 끝내면 새로 추가해야합니다. 나는 그걸 가지고 놀거야. –