2014-11-25 181 views
4

我正在研究web api項目,我的web api正在調用repository.Repository調用第三方數據源來執行CRUD。調用data source代價非常高,並且每週更新一次。Web API中的數據緩存

所以我想實現緩存。我見過幾個輸出緩存包,但它不符合我的要求,這是因爲:

  1. 如果我輸出緩存GET方法,我不能夠使用相同的緩存輸出GetById方法或一些相同的緩存數據其他操作如查找運營。在發生任何更新/發佈時,我還必須手動更新緩存。
  2. 還有一件事我很困惑該怎麼辦在這種情況下是否刪除緩存或更新 緩存每當放置或後操作發生?

我完全糊塗完成這個要求。請告訴我如何滿足這個要求。我在網上搜索,但還沒有找到類似的東西。

我是新手,無論在SO和的WebAPI所以原諒我,如果問題不能滿足標準

+0

有一些東西不清楚:如果數據源每週更新一次,爲什麼要調用每個請求來檢索數據?或者你只是打電話來執行創建/刪除/刪除操作? – 2014-11-25 12:49:19

回答

0

如果我輸出緩存GET方法,我不能夠使用相同的緩存輸出 在GetById方法或相同針對其他操作緩存數據 ,比如find opeartion。我還必須在有任何更新/帖子發生時手動更新緩存 。

要將緩存的數據用於不同的操作,如GetById和Find,您需要將數據存儲在不同的數據結構中。像REDIS這樣的緩存支持可由GetById使用的對象的散列表。這完全取決於你的情況需要使用什麼樣的DS。

還有一兩件事我很困惑,在這種情況下是否 刪除緩存或更新緩存,每當放或操作後會發生什麼呢?

要回答第一個問題的第二部分和這一個,我會說你需要在回寫和通過緩存寫入之間進行選擇。您可以在this article中閱讀有關WB和WT緩存的更多信息。基本上有兩種方法

  1. 每個緩存項都有一些TTL,然後從「數據源」中獲取數據。 Pros是您的POST和PUT操作將會更快,因爲它不需要更新緩存,但是缺點是數據可能會在某個時候過時。
  2. 第二種方法是在POST或PUT操作發生時使緩存中的相應條目無效。
  3. 第三個選項是在POST和PUT時更新緩存條目。

在寫入/更新延遲方面,選項1是最快的,但有可能導致陳舊的數據。選項2將減慢GET,PUT/POST操作,選項3將減慢寫入操作。

您的選擇應該取決於系統中讀寫操作的比率。如果您正在設計的系統讀取較重,則選項3優於2。