上下文
我在 ehcache 中存储了一个 java.util.List。
Key(String) --> List<UserDetail>
有序列表包含我最活跃用户的前 10 名排名。
问题
并发的第 3 方客户端可能正在请求此列表。 关于排名,我要求尽可能保持最新。因此,如果排名由于用户的 Activity 而改变,则缓存中的有序列表不能陈旧太久。重新计算新列表后,我想立即替换缓存中的列表。
考虑一个繁忙的场景,其中多个并发客户端请求排名;我怎样才能以这样的方式替换缓存项: 客户端可以继续提取可能过时的快照。他们永远不应该得到空值。
只有 1 个服务器线程写入缓存。
最佳答案
我不明白问题是什么。替换缓存项后,客户端将提取新的缓存项。在那之前,他们将提取旧的缓存项。
他们永远不会返回空缓存项,除非您实际从缓存中删除该项然后替换它。
如果 EHCache 像那样工作,我会认为它从根本上被破坏了,因为它是线程安全的!
关于java - 原子写入 ehcache,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2559679/