Redis ist für Anwendungsfälle gedacht, in denen Sie sehr häufig auf Daten zugreifen und diese aktualisieren müssen und in denen Sie von der Verwendung von Datenstrukturen (Hashes, Sätze, Listen, Zeichenfolgen oder sortierte Sätze) profitieren. Es wurde entwickelt, um sehr spezifische Anwendungsfälle zu erfüllen. Wenn Sie einen allgemeinen Anwendungsfall wie eine sehr flexible Suche haben, sind Sie mit etwas, das für diesen Zweck entwickelt wurde, wie der elastischen Suche oder SOLR, viel besser bedient.
Das heißt, wenn Sie dies in Redis tun müssen, gehe ich wie folgt vor (vorausgesetzt, Benutzer können Namen und Telefonnummern freigeben):
name:some_name -> set([id1, id2, etc...])
name:some_other_name -> set([id3, id4, etc...])
phone:some_phone -> set([id1, id3, etc...])
phone:some_other_phone -> set([id2, id4, etc...])
id1 -> {'name' : 'bob', 'phone' : '123-456-7891', etc...}
id2 -> {'name' : 'alice', 'phone' : '987-456-7891', etc...}
In diesem Fall erstellen wir für jeden Namen (mit dem Präfix „name:“) und jede Telefonnummer (mit dem Präfix „phone:“) einen neuen Schlüssel. Jeder Schlüssel verweist auf eine Reihe von IDs, die alle gewünschten Informationen für einen Benutzer enthalten. Wenn Sie beispielsweise nach einem Telefon suchen, tun Sie Folgendes:
HGETALL 'phone:123-456-7891'
und dann die Ergebnisse durchgehen und alle Informationen zu jedem (Name in unserem Beispiel) in der Sprache Ihrer Wahl zurückgeben (Sie können dies alles in serverseitigem Lua auf der Redis-Box tun, um noch schneller zu gehen und Netzwerk-Hin-und-Her zu vermeiden her, wenn Sie wollen):
for id in results:
HGET id 'name'
Ihre Kosten betragen hier O(m)
wobei m
ist die Anzahl der Benutzer mit der angegebenen Telefonnummer, und dies wird auf Redis ein sehr schneller Vorgang sein, da es auf Geschwindigkeit optimiert ist. In Ihrem Fall wird es übertrieben sein, weil Sie wahrscheinlich nicht brauchen, dass die Dinge so schnell gehen, und Sie eine flexible Suche bevorzugen würden, aber so würden Sie es machen.