Jak mogę używać redis z Django?


95

Słyszałem o redis-cache, ale jak to dokładnie działa? Czy jest używany jako warstwa między django i moim rdbms, w jakiś sposób buforując zapytania rdbms?

A może ma być używany bezpośrednio jako baza danych? W co wątpię, ponieważ ta strona github nie zawiera żadnych danych logowania, żadnej konfiguracji ... po prostu mówi ci, aby ustawić jakąś właściwość config.

Odpowiedzi:


73

Ten moduł Pythona dla Redis ma jasny przykład użycia w pliku readme: http://github.com/andymccurdy/redis-py

Redis został zaprojektowany jako pamięć podręczna RAM. Obsługuje podstawowe GET i SET kluczy oraz przechowywanie zbiorów, takich jak słowniki. Zapytania RDBMS można buforować, przechowując ich wyniki w Redis. Celem byłoby przyspieszenie Twojej witryny Django. Nie rozpoczynaj korzystania z Redis ani żadnej innej pamięci podręcznej, dopóki nie potrzebujesz prędkości - nie optymalizuj przedwcześnie.


Ale jak sprawdzić, czy pamięć podręczna w Redis wymaga aktualizacji? Czy porównujesz liczbę rekordów, czy jest lepszy sposób?
Marconi

7
Odbywa się to zwykle poprzez ustawienie TTL dla klucza: redis.io/commands/ttl . Jeśli klucz wygaśnie, musisz przejść do bazy danych. Więc jeśli klucz jest w redis, to go używasz. Zwróć uwagę, że prosta implementacja tego powoduje pewne problemy: kiedy popularny klucz wygaśnie, masz en.wikipedia.org/wiki/Thundering_herd_problem , chcesz użyć en.wikipedia.org/wiki/Negative_cache , a Twoja baza danych potrzebuje en.wikipedia. org / wiki / Admission_control
Spike Gronim

4
Umm, cóż, a) Redis został zaprojektowany tak, aby był czymś więcej niż pamięcią podręczną RAM - jest trwały (ale zawiera funkcje dla pamięci podręcznej), b) to coś więcej niż zwykłe przechowywanie wartości klucza - są listy, skróty itp. Z wbudowanymi manipulacjami.
Olli

8
Szczerze buforowanie obiektów modelu / odpowiedzi nie podlega przedwczesnej optymalizacji. O ile nie zostaniesz za to obciążony (jak na heroku), pamięć podręczna nie zaszkodzi nawet w przypadku małych aplikacji.
vikki

1
Nie chodzi o szybkość, chodzi o zasoby. Tabela w pamięci podręcznej będzie tańsza.
dman

60

To, że Redis przechowuje rzeczy w pamięci, nie oznacza, że ​​ma to być pamięć podręczna. Widziałem ludzi używających go jako trwałego magazynu danych.

Fakt, że może być używany jako pamięć podręczna, wskazuje, że jest przydatny jako pamięć o wysokiej wydajności. Jeśli system Redis przestanie działać, możesz utracić dane, które nie zostały ponownie zapisane na dysku. Istnieje kilka sposobów na złagodzenie takich zagrożeń, np. Replika w trybie hot-standby. Jeśli Twoje dane mają kluczowe znaczenie dla misji, na przykład jeśli prowadzisz bank lub sklep, Redis może nie być dla Ciebie najlepszym wyborem. Ale jeśli napiszesz grę o dużym natężeniu ruchu z trwałymi danymi na żywo lub niektórymi elementami interakcji społecznej i zarządzasz prawdopodobieństwem utraty danych, aby było całkiem akceptowalne, to Redis może być wart obejrzenia.

W każdym razie pozostaje kwestia, tak, Redis może być używany jako baza danych.


3
W mojej firmie używamy Redis do przechowywania podsumowań i produktów wygenerowanych przez Cassandra & Postgres. Ilość tych produktów (kilka miliardów), jak często trzeba je wymieniać i to, że nigdy nie wiemy, co jest potrzebne w danej chwili, sprawia, że ​​idealnie pasują do redis. Ponadto, gdy przekroczysz milion wierszy czegokolwiek w bazie danych SQL, redis może być doskonałym, uzupełniającym zasobem do testowania członkostwa (np. Czy te jednostki są w tej domenie?)
David,

Nie mogę przestać się zastanawiać, dlaczego moja odpowiedź, która dotyczyła dokładnie tego samego punktu kilka miesięcy wcześniej, została przeskoczona przez twoją… No cóż.
ostergaard

22

Redis to w zasadzie sklep KV „w pamięci” z mnóstwem dzwonków i gwizdków. Jest niezwykle elastyczny. Możesz go używać jako magazynu tymczasowego, takiego jak pamięć podręczna, lub magazynu stałego, takiego jak baza danych (z zastrzeżeniami, o których mowa w innych odpowiedziach).

W połączeniu z Django najlepszym / najczęstszym przypadkiem użycia Redis jest prawdopodobnie buforowanie „odpowiedzi” i sesji.

Tutaj jest zaplecze https://github.com/sebleier/django-redis-cache/ i doskonała dokumentacja w dokumentach Django tutaj: https://docs.djangoproject.com/en/1.3/topics/cache/ .

Niedawno zacząłem używać https://github.com/erussell/django-redis-status do monitorowania mojej pamięci podręcznej - działa to niezwykle. (Skonfiguruj maxmemory w redis lub wyniki nie są zbyt przydatne).



2

Redis jako podstawowa baza danych

Tak, możesz użyć magazynu kluczy i wartości Redis jako podstawowej bazy danych. Redis nie tylko przechowuje pary klucz-wartość, ale także obsługuje różne struktury danych, takie jak

  1. Lista
  2. Zestaw
  3. Posortowany zestaw
  4. Hashe
  5. Mapy bitowe
  6. Hyperloglogi

Typy danych Redis Official doc

Usługa Redis znajduje się w magazynie klucza i wartości pamięci, więc musisz być tego świadomy, jeśli wystąpi awaria serwera Redis, Twoje dane zostaną utracone.

Redis może również utrwalać kontrolę danych w oficjalnym dokumencie.

Oficjalny dokument Redis Persistence


Redis jako pamięć podręczna

Tak Redis znajdują się w Django i RDBMS.

Jak to działa

given a URL, try finding that page in the cache if the page is in the cache: return the cached page else: generate the page save the generated page in the cache (for next time) return the generated page

Framework pamięci podręcznej Django Official Doc


Jak można używać Redis z Django

Możemy użyć klienta redis python redis-py dla aplikacji Django.

Klient Redis Python redis-py Github

Możemy użyć Django-redis do obsługi pamięci podręcznej django.

Django-redis jest zbudowany na redis-py i dodał dodatkowe funkcje związane z aplikacją django.

Django-redis doc Github

Istnieją również inne biblioteki.


Przypadki użycia i typy danych w Redis

Niektóre przypadki użycia

  • Pamięć podręczna sesji
  • Analityka w czasie rzeczywistym
  • Buforowanie WWW
  • Rankingi

Najpopularniejsze przypadki użycia Redis według typów struktur danych podstawowych


Firmy Big Tech używające Redis

 Twitter GitHub Weibo Pinterest Snapchat Craigslist Digg StackOverflow Flickr 

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.