Redis je pro případy použití, kdy potřebujete přistupovat k datům a aktualizovat je velmi často a kde těžíte z použití datových struktur (haše, sady, seznamy, řetězce nebo tříděné sady). Je vyroben tak, aby vyplnil velmi specifické případy použití. Pokud máte obecný případ použití, jako je velmi flexibilní vyhledávání, mnohem lépe by vám posloužilo něco vytvořeného pro tento účel, jako je elastické vyhledávání nebo SOLR.
To znamená, že pokud to musíte udělat v Redis, udělám to následovně (za předpokladu, že uživatelé mohou sdílet jména a telefonní čísla):
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...}
V tomto případě vytváříme nový klíč pro každé jméno (s předponou „jméno:“) a každé telefonní číslo (s předponou „telefon:“). Každý klíč ukazuje na sadu ID, která obsahují všechny informace, které chcete pro uživatele. Když budete hledat například telefon, uděláte:
HGETALL 'phone:123-456-7891'
a poté procházet výsledky a vracet jakékoli informace o každém (jméno v našem příkladu) ve vašem zvoleném jazyce (celou tuto věc můžete provést v Lua na straně serveru na krabici Redis, abyste mohli jít ještě rychleji a vyhnout se síťovému back-and- dále, pokud chcete):
for id in results:
HGET id 'name'
Vaše náklady zde budou O(m)
kde m
je počet uživatelů s daným telefonním číslem a na Redis to bude velmi rychlá operace, protože je optimalizovaná pro rychlost. Ve vašem případě to bude přehnané, protože pravděpodobně nepotřebujete, aby věci šly tak rychle, a raději byste měli flexibilní vyhledávání, ale udělali byste to takto.