2013-04-24 14 views
11

Mamy aplikację na iOS, która komunikuje się z serwerem Django przez REST API. Większość danych zawiera raczej duże obiekty przedmiotów, które obejmują kilka powiązanych modeli, które renderują się w pojedynczy płaski słownik, a dane te rzadko się zmieniają.Używanie Redis jako pośredniej pamięci podręcznej dla REST API

Wykryliśmy, że zapytanie o to nie jest problemem dla PostgreSQL, ale generowanie odpowiedzi JSON zajmuje zauważalny czas. Z drugiej strony kolekcje przedmiotów różnią się w zależności od użytkownika.

Pomyślałem o systemie renderowania, w którym po prostu budujemy słownik dla obiektu Item i zapisujemy go w redis jako ciąg JSON, w ten sposób możemy obsługiwać API bezpośrednio z redis (np. HMGET (id elementów w bibliotece użytkownika), która jest szybka i sprawia, że ​​względnie łatwo zregenerować "renderowane instancje", w zasadzie zaledwie kilka z sygnałów post_save.

Zastanawiam się, jak dobry jest ten projekt, czy są w nim jakieś poważne wady? zadanie?

+0

Jak duże są odpowiedzi JSON i jak długo trwa zrzut jsona? –

+0

powiedzmy około 300 dykt z 20 kluczami w nich z zagnieżdżonymi dyktami, zarówno tastypie, jak i django-rest-framework renderują te do 1s na MBPr –

+0

czy próbowałeś już użyć cjson lub ultra json? –

Odpowiedz

16

Oczywiście, robimy to samo w naszej firmie, używając Redis do przechowywania nie JSON, ale dużych ciągów XML, które są generowane z baz danych dla RESTful wniosków i oszczędza wiele przeskoków sieci i kosztów ogólnych.

Kilka rzeczy, o których warto pamiętać, jeśli jest to po raz pierwszy używasz Redis ...

Dedicated Server Redis
Redis jest jednowątkowy i powinny być wdrażane na serwerze dedykowanym z wystarczająca moc procesora. Nie popełnij błędu podczas wdrażania go na swojej aplikacji lub serwerze bazy danych.

High Availability
Konfigurowanie Redis z Master/Slave do replikacji wysokiej dostępności. Wiem, że było wiele postępów z Redis cluster, więc możesz to sprawdzić również dla HA.

Hit Cache/panna
Podczas sprawdzania Redis dla pamięci podręcznej „hit”, jeśli połączenie jest martwy lub jakikolwiek wyjątek występuje, nie powiedzie się wniosek, tylko domyślne do bazy danych; buforowanie powinno zawsze być "najlepszym wysiłkiem", ponieważ baza danych zawsze może być używana jako ostateczność.

+0

Dzięki za porady! Jaki ładunek macie Państwo na serwerach redis? Właśnie zaczynamy i jak na razie wygląda na to, że jedna instancja EC2 wystarczy –

+0

Redis będzie ostatnim miejscem, w którym napotkasz wąskie gardła. Nasz serwer redis działa na platformie RedHat Linux Enterprise z 1 dwurdzeniowym procesorem/4 GB pamięci RAM; w oparciu o nasze testy, 25K zapisuje w sekundach i dwa razy więcej niż w przypadku odczytów w oparciu o nasze ładunki (25-100Kb), a Redis nawet nie łamie potu; to całkowicie kopie tyłek. – raffian

Powiązane problemy