2014-04-08 122 views
0

我有一個關於如何有效緩存對象列表的問題。我有一個樣本表Trip s。每個Trip具有DateFromDateTo。我想緩存一個列表Trip s。緩存動態更改對象列表

,我認爲越來越 Trip小號ValueObjects的 Trip S型數據庫和緩存清單

第一種方法(由值對象我的意思是顯示一個列表上的旅行需要的所有數據)在x分鐘。這種方法是很簡單,但有幾個disadventages: - 處理分頁 - 如果我按頁存儲這些頁面(例如與主要TripsP1TripsP2,等...)。當GUI的頁面大小的變化,我將不得不作出一組使用不同的密鑰旅程(例如與主要TripsP1Size1TripsP1Size2等) - 如何處理排序列表?爲每個濾鏡組合保留一組Trip s不同的按鍵?

第二條本辦法我認爲是hittng數據庫中的每個請求,但是從數據庫中只需要Trip.Id。接下來,我想從緩存中獲取每個Trip ValueObject。在創建或修改Trip後,我會將它們放在與TripId一樣的Cache中作爲關鍵字。另外,如果由於某種原因,我無法在緩存中找到Trip ValueObject,我將其從數據庫中取出並放入緩存中。

哪種方法更好?或者,也許你可以建議一些更有效的方式?

回答

0

我不明白爲什麼要以Pages的形式持有這些旅程。

爲什麼不加載所有車次到列表(可以進行排序,取決於你的需要),並建立一個內存索引LINQ的搜索查詢?例如this lib

您可以在緩存內存中的索引創建非常快速的搜索,這取決於你的應用程序查詢模式。

如果您擔心Trips在事務處理過程中發生變化(所有緩存都未命中),則應使用Immutable集合(並設置Trip不可變類型)來實現它。

這樣,當用戶請求服務器提供特定條件的項目,您可以輕鬆地選擇這些項目,併爲其提供了獲取數據流的的IQueryable(IEnumarable序列)方法。

希望這會有所幫助,Ofir。