2011-10-28 11 views
5

Powiedziano mi, żebym używał Redis dla uwierzytelnionych użytkowników sklepu w mojej aplikacji na Heroku, więc postanowiłem dzisiaj wskoczyć. Co chcę zrobić jest przechowywanie mieszań użytkowników w sklepie Redis tak:Wyszukiwanie według wielu wartości w kluczu/wartości redis

{ 
    id:4532143215432, 
    username:'davejlong', 
    email:'[email protected]' 
} 

a następnie chcę, aby móc wyszukiwać według jednej nazwy użytkownika lub ID. Czy to możliwe w przypadku Redisa?

Używam moduł Redis node.js, która wspiera wszelkie Redis dowodzić https://github.com/mranney/node_redis

Odpowiedz

2

Jest kilka problemów w @orangeoctopus usecae.

Redis 127.0.0.1:6379> HMSET id: 4532143215432 nazwa davejlong ​​[email protected] OK Redis 127.0.0.1:6379> Użytkownik HMSET: davejlong ​​id 4532143215432 email [email protected] OK

Spowoduje to duplikację, pomyśl o dodaniu nowych wartości i usunięciu aktualizacji &.

więc wolę ten

SET user:davejlong 1 
HMSET user:1 username davejlong email [email protected] 

1) W przypadku nazwy użytkownika

redis.get('user:davejlong',function(err,id){ 
    console.log('User Id of @davejlong: ' + id); 
    redis.hgetall('user:'+id,function(err,user){ 
     console.log('User Data: ' + user); 
    }) 
    }) 

2) w przypadku Id

redis.hgetall('user:1',function(err,user){ 
     console.log('User Data: ' + user); 
    }) 
+0

Umyśliłem do tego z "bardziej zwartym sposobem na zrobienie tego ...", ale było zbyt leniwy, aby go wypisać. +1 –

+0

@philpirozhkov który ... –

+0

Przepraszam, że przegapiłem punkt, ponieważ nie dodajesz możliwości wyszukiwania pocztą. 'SET user: [email protected] 1' i jesteś w stanie znaleźć pocztą –

3

Jest to tak proste, jak każdemu użytkownikowi przechowywanie dwa razy. Raz za pomocą klucza id i raz za pomocą klucza nazwy użytkownika.

Bardziej kompaktowym sposobem na zrobienie tego pod względem pamięci jest posiadanie nazwy użytkownika kluczem do identyfikatorów, więc zapytanie o nazwę użytkownika powinno wyglądać następująco: zapytanie według nazwy użytkownika, id; wpisz identyfikator, uzyskaj informacje.

Niestety, nie ma dobrego sposobu na wpisanie tych samych rzeczywistych danych za pomocą dwóch różnych kluczy.


Na przykład, jeśli chcesz dodać nowego użytkownika, a następnie zapytać o nim:

redis 127.0.0.1:6379> HMSET id:4532143215432 username davejlong email [email protected] 
OK 
redis 127.0.0.1:6379> HMSET user:davejlong id 4532143215432 email [email protected] 
OK 
redis 127.0.0.1:6379> HGET id:4532143215432 username 
"davejlong" 
redis 127.0.0.1:6379> HGET user:davejlong id 
"4532143215432" 
redis 127.0.0.1:6379> HMGET user:davejlong email id 
1) "[email protected]" 
2) "4532143215432" 
redis 127.0.0.1:6379> DEL user:davejlong 
(integer) 1 
redis 127.0.0.1:6379> DEL id:4532143215432 
(integer) 1 

Zauważ, że gdy tworzę użytkownika, używam HMSET dwukrotnie. Teraz mogę zapytać o nazwę użytkownika lub id. Też muszę usunąć oba klucze teraz.

+0

Czy możesz mi pokazać, w jaki sposób to zrobić w CLI? Jestem zupełnie nowy w tym wszystkim, więc nie jestem pewien, czy użyć skrótu, listy itp. –

+0

Moja odpowiedź została zaktualizowana na przykładzie. –

+0

Tutaj tworzysz zduplikowane dane. Rozważmy indeksy użycia. –

Powiązane problemy