我裏面存儲ehcache的一個java.util.List。
Key(String) --> List<UserDetail>
有序列表包含我最活躍的用戶前10名。
問題
併發第三方客戶端可能會請求此列表。 我有一個關於排名的要求,儘可能最新。因此,如果排名由於用戶的活動而改變,那麼緩存中的有序列表不能保留很長時間。一旦我重新計算了一個新的列表,我想立即替換緩存中的一個。
考慮一個繁忙的場景,即多個併發客戶端請求排名;我怎樣才能以這樣的方式替換緩存項目:客戶端可以繼續提取可能過時的快照。他們不應該得到一個空值。
只有1個服務器線程寫入緩存。
您說得對net.sf.ehcache.Cache的javadoc表示它是線程安全的。不幸的是,我在調用put之前刪除了緩存項。我應該只調用Cache.put(..)。 – 2010-04-01 10:49:43