我正在使用使用EHcache的playframework 2。現在的API只有Cache.set
和Cache.get
,所以我認爲有一個大的緩存。一個緩存vs多個緩存
如果有多個緩存,效率會不會更高?檢查一個緩存的IP地址,一個緩存用戶名等。
你能給我一些優點/缺點嗎?
我正在使用使用EHcache的playframework 2。現在的API只有Cache.set
和Cache.get
,所以我認爲有一個大的緩存。一個緩存vs多個緩存
如果有多個緩存,效率會不會更高?檢查一個緩存的IP地址,一個緩存用戶名等。
你能給我一些優點/缺點嗎?
Play中Cache對象的用途是擁有一個通用緩存系統。
您可以通過擴展實際的緩存,並使用特定的前綴專門緩存:
class UserCache {
public static final String PREFIX = "UserCache";
public static void set(String key, User value) {
Cache.set(PREFIX + key, value);
}
public static User get(String key) {
return (User)Cache.get(PREFIX + key);
}
}
在最一般的意義上考慮緩存。通常情況下,緩存允許增長到一定的大小限制,然後在最後一次訪問的基礎上從緩存中刪除項目。
因此,假設您想緩存蘋果和梨,並且您有足夠的空間來保存緩存中的20個項目。如果你把它分成一個蘋果緩存和另一個梨緩存,它看起來很好的分割。然而,如果你的客戶使用了大量的蘋果,但幾乎沒有梨,那麼最終蘋果緩存將會很快滿載,所以最近使用的蘋果將從蘋果緩存中移除,而沒有使用的梨長時間使用可以留在梨緩存中,因爲它沒有滿。
你可以看到,如果你只有一個緩存可以存儲蘋果或梨,那麼你正在緩存最近使用的對象,因此整體效率可能更高。所以從性能的角度來看,你通常更好的是儘可能少的緩存。
是的我已經做了類似的方法。但讓我們說我們的緩存有1000個條目。我們嘗試查找特定的用戶。如果用戶不在緩存中,我們將得到1000次未命中。如果我們只有用戶的特定緩存,那麼緩存將比例如100個條目小得多 - >性能更好。或者我錯了? – 2012-08-17 17:55:17
對於這種類型的數字,差異很小(訪問內存中的散列表)。 – 2012-08-17 19:39:49