2013-03-25 22 views
15

Tôi đang sử dụng node.js để viết một dịch vụ web, nó gọi API cho một số dữ liệu nhưng tôi bị giới hạn bởi API cho một số cuộc gọi mỗi tháng, vì vậy tôi ước để lưu trữ dữ liệu tôi lấy từ API để tôi có thể phân phối dữ liệu đó với dữ liệu được lưu trong bộ nhớ cache và tìm nạp lại dữ liệu từ API tại một khoảng thời gian được định thời gian.Cách thích hợp để lưu dữ liệu từ cuộc gọi API với nodejs

Đây có phải là cách tiếp cận tốt cho vấn đề này không? Và tôi nên sử dụng khung bộ nhớ đệm nào? Tôi nhìn vào redis nút nhưng tôi không nghĩ rằng một cửa hàng giá trị quan trọng là thích hợp cho dữ liệu.

Cảm ơn!

+1

Tôi biết điều này là cũ, nhưng chỉ tò mò - bạn đang sử dụng thư viện nào trong nút cho các cuộc gọi http của mình? – jpodwys

+1

Nếu bạn đang sử dụng thư viện superagent tuyệt vời cho các cuộc gọi API của bạn từ nút, hãy cân nhắc xem xét bộ đệm siêu dữ liệu. Bạn có thể nhận được bộ nhớ đệm redis được xây dựng ngay vào truy vấn superagent của bạn. Disclaimer: Tôi đã viết superagent-cache. – jpodwys

Trả lời

30

Tôi không đồng ý với bạn về Redis. Redis là một kho khóa-giá trị rất mạnh có thể dễ dàng được sử dụng cho những gì bạn muốn. Nó được thiết kế để có công cụ bán phá giá trong đó và đưa ra một lần nữa. Trong trường hợp của bạn, bạn có thể dễ dàng nhớ cache đáp ứng API bằng cách lưu nó vào Redis với truy vấn là khóa (nếu đây là REST API bạn đang gọi, bạn có thể sử dụng URL hoặc dữ liệu tuần tự làm khóa) và chỉ cần cache phản hồi như một đối tượng JSON được xâu chuỗi (hoặc chuỗi XML nếu bạn tình cờ nhận được điều đó).

Bạn cũng có thể đặt hết hạn trên dữ liệu được lưu trong bộ nhớ cache và dữ liệu sẽ bị xóa khi hết hạn.

Sau đó, bạn có thể kết thúc cuộc gọi API của mình trong chức năng trợ giúp kiểm tra bộ nhớ cache và trả về giá trị nếu có. Nếu nó không phải là nó làm cho các yêu cầu API, thêm nó vào bộ nhớ cache, sau đó trả về nó.

Đây có lẽ là giải pháp đơn giản nhất và dường như bao gồm trường hợp sử dụng của bạn khá tốt.

+0

Cảm ơn bạn rất nhiều vì đã trả lời! Tôi không quen thuộc với redis do đó đánh giá ban đầu của tôi. Những gì bạn đã viết có ý nghĩa và tôi sẽ sử dụng giải pháp này cho dịch vụ web của tôi. –

+2

Điều này cũng sẽ tránh tìm nạp lại dữ liệu được lưu vào bộ nhớ cache cho đến khi thực sự cần thiết, thay vì thực hiện nó trong một khoảng thời gian bất kể nó đang được sử dụng như câu hỏi gợi ý hay không. –

+0

Đây là câu trả lời thực sự tốt cho câu hỏi, Bạn có quen thuộc với một số loại hướng dẫn hoặc một mã ví dụ về cách sử dụng thiết lập này trong nút không? –

Các vấn đề liên quan