2013-03-25 13 views
15

Używam node.js do pisania usługi internetowej, wywołuje API dla niektórych danych, ale jestem ograniczony przez API do liczby połączeń na miesiąc, więc życzę buforować dane, które pobieram z interfejsu API, dzięki czemu mogę obsłużyć dane z pamięci podręcznej i ponownie pobrać dane z interfejsu API w określonym przedziale czasowym.Właściwy sposób buforowania danych z wywołania API za pomocą nodejs

Czy to dobre podejście do tego problemu? I jakiego schematu buforowania powinienem używać? Spojrzałem na węzeł-redis, ale nie sądzę, że zapis wartości klucza jest odpowiedni dla danych.

Dzięki!

+1

Wiem, że jest stary, ale po prostu ciekawy - jakiej biblioteki używasz w węźle do połączeń HTTP? – jpodwys

+1

Jeśli korzystasz z doskonałej biblioteki obiektów Superagent do wywoływania interfejsu API z węzła, rozważ przeglądanie pamięci podręcznej superagenta. Możesz uzyskać buforowanie Redis wbudowane bezpośrednio w zapytania dotyczące superagentów. Zastrzeżenie: napisałem pamięć podręczną superagenta. – jpodwys

Odpowiedz

30

Nie zgodziłbym się z Państwem w sprawie Redis. Redis to bardzo potężny sklep z kluczem wartości, który można z łatwością wykorzystać do tego, co chcesz. Został zaprojektowany, aby mieć w nim rzeczy wyrzucone i wyjęte ponownie. W twojej sytuacji możesz łatwo buforować odpowiedź API, zapisując ją w Redis z zapytaniem jako kluczem (jeśli jest to API REST, do którego dzwonisz, możesz użyć adresu URL lub serializowanych danych jako klucza) i po prostu cache odpowiedź jako usztywniony obiekt JSON (lub ciąg znaków XML, jeśli tak się stało).

Można również ustawić wygasanie na danych z pamięci podręcznej, a zostanie ono wyczyszczone po upływie czasu.

Następnie można zawinąć wywołanie API w funkcji pomocnika, która sprawdza pamięć podręczną i zwraca wartość, jeśli jest obecna. Jeśli nie, powoduje to żądanie API, dodaje je do pamięci podręcznej, a następnie zwraca je.

Jest to prawdopodobnie najprostsze rozwiązanie i wydaje się, że całkiem dobrze radzi sobie z przypadkiem użycia.

+0

Dziękuję bardzo za odpowiedź! Nie znam Redisa, stąd moja wstępna ocena. To, co napisałeś, ma sens i będę korzystał z tego rozwiązania w moim serwisie internetowym. –

+2

Pozwoli to także uniknąć ponownego pobierania danych z pamięci podręcznej, aż do momentu, gdy będzie rzeczywiście potrzebny, w przeciwieństwie do robienia tego w odstępie czasu, niezależnie od tego, czy jest używany, jak sugeruje to pytanie. –

+0

To jest naprawdę dobra odpowiedź na pytanie. Czy znasz jakiś samouczek lub przykładowy kod, jak korzystać z tej konfiguracji w węźle? –

Powiązane problemy