2009-10-01 85 views
1

我有一個Order對象的列表。C#ASP.NET - 緩存需要搜索/排序的對象列表?

這些對象在我的應用程序的多個用戶之間共享,並且在經常訪問時更改很少,這使得它們成爲緩存的理想候選者。

我面臨的問題是,我對我的MSSQL數據庫進行了排序和搜索的LINQ查詢 - 但是如果我將它們保存在緩存中,我該如何做?我不想重複代碼(幹!)。

回答

1

在我看來,你必須做這樣的事情

  • 有內存加載的對象和緩存它們作爲一個列表/字典..什麼是適合你在一個單身BL類的通用方法
  • 然後,您的Linq查詢在執行排序/搜索時將在BL類中的緩存對象集合上完成,而不是直接進入MySQL數據庫。

因此,在第一次調用完成後,您的緩存集合會被查詢,但由於它仍然是空的,所以您去取所有對象(當然這取決於數據量),然後一次數據存儲在內存中,您的LINQ查詢將在其上執行。
後續調用不會觸及數據庫,只會觸發緩存的集合。

您必須注意有線程安全訪問您的收藏。此外,您可能會包含一些刷新間隔,基本上是以某些固定間隔刷新緩存的時間戳。