Redis
 sql >> база данни >  >> NoSQL >> Redis

Търсене в стойности на redis db

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 поради това колко е оптимизиран за скорост. Във вашия случай ще бъде излишно, защото вероятно нямате нужда нещата да вървят толкова бързо и бихте предпочели да имате гъвкаво търсене, но ето как бихте го направили.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. проблеми при задаване на бекенда на задачи celery в Python

  2. Redis zrevrangebyscore, сортиране, различно от лексикографския ред

  3. Достигнати са максимални връзки за Azure Redis Cache

  4. docker:MISCONF Redis е конфигуриран да запазва RDB моментни снимки

  5. Внедряване на референтни набори в Redis