Kiedy używać magazynu kluczy / wartości, takiego jak Redis, zamiast / obok bazy danych SQL?

166

Przeczytałem świetne rzeczy o magazynach kluczy / wartości, takich jak Redis, ale nie wiem, kiedy nadszedł czas, aby użyć ich w aplikacji.

Powiedzmy, że projektuję aplikację internetową; Wiem, jakiego stosu będę używał dla front-endu, back-endu, baz danych itp. Jakie są scenariusze, w których powiedziałbym: „Och, potrzebujemy też Redis dla X, Y lub Z”.

Byłbym wdzięczny za przykłady node.js, a także przykłady inne niż node.js.

Chris Abrams
źródło

Odpowiedzi:

102

Wydaje się, że nie wiem, kiedy należy go użyć w aplikacji.

Polecam przeczytanie tego samouczka, który zawiera również przypadki użycia. Ponieważ redis jest raczej zorientowany na pamięć, jest naprawdę dobry w przypadku często aktualizowanych danych w czasie rzeczywistym, takich jak magazyn sesji, baza danych stanu, statystyki, buforowanie i zaawansowane struktury danych zapewniają wszechstronność w wielu innych scenariuszach.

Redis nie jest jednak zamiennikiem NoSQL dla klasycznych relacyjnych baz danych, ponieważ nie obsługuje wielu standardowych funkcji świata RDBMS, takich jak zapytania o dane, które mogą je spowolnić. Zastąpione są raczej bazy danych dokumentów, takie jak MongoDB lub CouchDB, a redis świetnie uzupełnia określone funkcje, w których przydatna jest szybkość i obsługa zaawansowanych struktur danych.

yojimbo87
źródło
3
Samouczek, z którym się łączysz, jest niesamowity!
Chris Abrams,
5
Zrobiłem szybkie wyszukiwanie w Google z tym adresem URL witryny samouczka i uznałem
Paul
66

Myślę, że nic lepiej nie wyjaśnia przypadków użycia Redis niż ten artykuł: http://antirez.com/post/take-advantage-of-redis-adding-it-to-your-stack.html

Założę się, że będziesz miał aha! za chwilę . ;)

Cytat z poprzedniego czytelnika:

Czytałem już o Redis i słyszałem, jak firmy go używają, ale nigdy do końca nie rozumiałem, do czego służy. Po przeczytaniu tego mogę powiedzieć, że rozumiem teraz Redis i jak jest przydatny. Niesamowite, że po wysłuchaniu tak wielu rzeczy wystarczył stosunkowo prosty artykuł.

Cytat z artykułu:

Redis różni się od innych rozwiązań bazodanowych pod wieloma względami: wykorzystuje pamięć jako główną pamięć masową, a dysk tylko do trwałości, model danych jest dość unikalny, jest jednowątkowy i tak dalej. Myślę, że kolejną dużą różnicą jest to, że aby skorzystać z Redis w środowisku produkcyjnym, nie trzeba przechodzić na Redis. Możesz go po prostu użyć, aby zrobić nowe rzeczy, które wcześniej nie były możliwe, lub aby naprawić stare problemy.

Przypadki użycia, których dotyczy artykuł:

  • Powolne aukcje najnowszych przedmiotów na Twojej stronie głównej
  • Tabele wyników i powiązane problemy
  • Porządkuj według głosów użytkowników i czasu
  • Implementacja wygasa na elementach
  • Liczenie rzeczy
  • Unikalne N przedmiotów w określonym czasie
  • Analiza tego, co się dzieje w czasie rzeczywistym, statystyki, ochrona przed spamem lub cokolwiek innego
  • Pub / Sub
  • Kolejki
  • Buforowanie
zenw0lf
źródło
Ten artykuł jest bardzo przydatny, mam to, co chciałem wiedzieć
Hos Mercury,
@ Zenw0lf Czy redis nadal jest najlepszy do prostego buforowania? Twój post pochodzi z 2011 roku, więc nie jestem pewien, czy jest coś innego, czego powinienem użyć.
Moondra
@Moondra Tak, projekt wciąż żyje, a jego twórca często publikuje. To wciąż wspaniały projekt dla różnych scenariuszy użytkowania!
zenw0lf
@ zenw0lf Dobry artykuł, ale wciąż jestem trochę zdezorientowany w niektórych przypadkach użycia. Na przykład przypadek użycia „najnowszej pozycji”, dlaczego w tym przypadku lepiej jest dodać Redis? co jest w bazie danych dodajemy w określonej tabeli tylko po to, aby mieć identyfikator użytkownika, komentarz (id) i / lub znacznik czasu i używamy tego bezpośrednio. Czy to nie będzie to samo?
Tony Lin
1
@TonyLin To jedno i drugie, jest szybkie, ponieważ jest w pamięci i ponieważ Redis ma również całkiem niezłą implementację najnowocześniejszych modeli danych, które pomagają mu wykonywać swoją pracę najlepiej, jak to tylko możliwe.
zenw0lf
9
  • Bardzo chciałbym używać redis w projektach czasu rzeczywistego. Niedawno zrobiłem dla jednego systemu śledzenia GPS, który był wcześniej zbudowany na mysql jako baza danych.

    KORZYŚĆ

    1. Za każdym razem, gdy tracker transmituje dane, nie muszę otwierać połączenia mysql i przechowywać go na nim. Możemy zapisać go na redis, a później przenieść do mysql przy użyciu innego procesu. Pozwoli to uniknąć równoczesnego połączenia z wielu trackerów do mysql.
    2. Mogę publikować wszystkie te dane GPS, a inni klienci (javascript / android) mogą subskrybować w czasie rzeczywistym za pomocą kolejki wiadomości opartej na redis
    3. Mogę wyzwalać alerty w czasie rzeczywistym
sumit
źródło
3

Jedna rzecz jest taka, że ​​Redis nie jest relacyjną bazą danych. Jeśli będziesz potrzebować SQL „JOIN”, nie będziesz chciał używać Redis ani żadnej innej nierelacyjnej bazy danych. Redis jest jednak szybszy niż większość relacyjnych baz danych. Jeśli zamierzasz wykonywać tylko zapytania par klucz: wartość, będziesz chciał użyć Redis.

EhevuTov
źródło
Na przykład, czy dobrze byłoby użyć redis do informacji dotyczących sesji użytkownika, aby szybciej uzyskać dostęp do nazwy, adresu e-mail, identyfikatora itp.?
Chris Abrams,
Myślę, że tak. Myślę, że gabinet w Kioto byłby jeszcze szybszy.
EhevuTov