2013-06-05 14 views
3

將字典存儲到緩存中進行快速查找時,我可以考慮兩個選項: 可以將整個字典存儲爲緩存項,也可以將緩存鍵與標識符相加。緩存-IDictionary vs頂級關鍵字前綴

例子:

myPseudoCache.Put("Users", myDictionaryWithGuidsAsKeys); 

VS

myPseudoCache.Put("Users_" + userId, singleUserEntity); 

環境是C#與ASP.NET應用程序的HttpRuntime.Cache,如果這是任何利益,但我也有興趣一般思想(可維護性方面,性能等)。

我想在這裏作出合理的決定,但真的不確定具體的優點和缺點。也許有更多經驗的人可以給我一些關於考慮什麼的建議?非常感謝!

+1

如果這是一個問題,第二個將使得很難做一些「foreach」緩存項目。 – Rawling

+0

謝謝@Rawling,絕對重要。雖然我不需要現在迭代對象,但我可能需要在某個時候執行此操作。再次感謝這方面! –

回答

2

它實際上是一種權衡。如果myPseudoCache將只包含'用戶',則可以採用第二種方法 - 即myPseudoCache.Put("Users_" + userId, singleUserEntity);

如果存在許多不同的項(稱爲組,角色),尤其是在頻率不同的情況下,爆炸緩存結構可能不是最優秀的一個。在這種情況下,在詞典中遵循樹狀結構或詞典是合理的 - 即,myPseudoCache.Put("Users", myDictionaryWithGuidsAsKeys);

例如,如果您的角色數量較少,則角色查找不會因爲用戶數量特別高而受到影響。

+0

我看到,在我的情況下,緩存不僅會存儲一種對象。你的回答與@Rawling的評論一起已經讓我想要存儲一本字典。謝謝! –

+0

謝謝,編輯您的答案完全滿足我的顧慮。我會用樹狀的方法,謝謝你的解釋! –

1

我認爲更好的選擇是保持整個字典比分隔值。首先,它在Dictionary中的鍵之間迭代要容易得多。對我而言,容量沒有區別。所以最大的收益是這個選項更容易維護,代碼會更清晰,尤其是當您從緩存中獲取數據時。

+0

感謝您的回答,我現在完全同意你的意見。對我來說,這似乎是正確的,自然的方式來做這些答案後:) –