2011-06-01 110 views
1

當使用JSON格式的Web服務時,我發現了一個有趣的問題。如何高效緩存JSON格式的Web服務請求 - 響應對

假設有Web服務。接受幾個參數。每個參數具有不同的值集。您可以通過傳遞不同的請求參數來獲得響應。

請求採用JSON格式。因爲請求參數有很多不同的組合。爲了優化性能,我想緩存請求和響應對。並將其存儲到本地數據庫中。如果有大的散列表,我可能想要將請求存儲爲鍵,將響應存儲爲值。

我在想MongoDB可能是一個解決方案。但我不確定。是否有可能將請求 - 響應作爲鍵值對存儲在這些類型的數據庫中?所以我可以立即緩存結果和響應給用戶。

謝謝。

回答

1

除非您的代碼和數據庫具有非常糟糕的性能(在這種情況下,您遇到的問題比設置緩存更大),否則不會從該緩存級別獲得任何好處。

您可以將JSON用作任何鍵/值存儲區的鍵,儘管使用散列作爲緩存鍵而不是直接使用JSON字符串可能有意義,並且可以使用具有memcached的非持久性內存緩存或redis將比像MongoDB這樣的完整文檔數據庫工作得更好。

在這種情況下,您將遇到大問題,即管理緩存過期 - 要獲得實時更新,您需要確切知道哪些緩存對象受到對給定對象的更改的影響。如果請求是一個簡單的ID獲取,那很簡單,但在您描述的場景中幾乎不可能。

管理緩存的另一種方法是過期,即在給定時間後從緩存中刪除對象。這假設可以在更新後顯示陳舊的數據。緩存通常支持內置的過期數據庫通常不支持。

+0

謝謝你的回答。我想散列請求json字符串。關於緩存exprie問題,我認爲這不是一個大問題。因爲我正在考慮運行一些cron作業來刷新數據。 – easycoder 2011-06-12 02:45:17

+0

使用cron作業更新緩存具有與更新內容時到期相同的問題 - 您需要知道哪些緩存項不再有效。除非你的意思是刪除整個緩存,這意味着你的服務器上的大部分負載都會在緩存重置之後立即消失 - 因爲你需要根據峯值而不是平均負載選擇硬件,所以失去了緩存的許多好處。 – 2011-06-12 06:05:52

相關問題