Redis е за случаи на използване, при които трябва да осъществявате достъп и да актуализирате данни с много висока честота и където се възползвате от използването на структури от данни (хешове, набори, списъци, низове или сортирани набори). Той е направен да попълни много специфични случаи на употреба. Ако имате общ случай на използване като много гъвкаво търсене, ще бъдете много по-добре обслужени от нещо, създадено за тази цел, като еластично търсене или SOLR.
Въпреки това, ако трябва да направите това в Redis, ето как ще го направя (ако приемем, че потребителите могат да споделят имена и телефонни номера):
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...}
В този случай правим нов ключ за всяко име (с префикс "име:") и всеки телефонен номер (с префикс "телефон:"). Всеки ключ сочи към набор от идентификатори, които съдържат цялата информация, която искате за потребител. Когато търсите телефон, например, ще направите:
HGETALL 'phone:123-456-7891'
и след това прегледайте резултатите и върнете каквато и да е информация за всеки (име в нашия пример) на избрания от вас език (можете да направите цялото това нещо в Lua от страна на сървъра в полето Redis, за да работите още по-бързо и да избегнете мрежово обратно и- нататък, ако искаш):
for id in results:
HGET id 'name'
Вашата цена тук ще бъде O(m)
където m
е броят на потребителите с дадения телефонен номер и това ще бъде много бърза операция на Redis поради това колко е оптимизиран за скорост. Във вашия случай ще бъде излишно, защото вероятно нямате нужда нещата да вървят толкова бързо и бихте предпочели да имате гъвкаво търсене, но ето как бихте го направили.