java - 原子写入 ehcache

标签 java multithreading caching concurrency ehcache

上下文

我在 ehcache 中存储了一个 java.util.List。

Key(String) --> List<UserDetail>

有序列表包含我最活跃用户的前 10 名排名。

问题

并发的第 3 方客户端可能正在请求此列表。 关于排名,我要求尽可能保持最新。因此,如果排名由于用户的 Activity 而改变,则缓存中的有序列表不能陈旧太久。重新计算新列表后,我想立即替换缓存中的列表。

考虑一个繁忙的场景,其中多个并发客户端请求排名;我怎样才能以这样的方式替换缓存项: 客户端可以继续提取可能过时的快照。他们永远不应该得到空值。

只有 1 个服务器线程写入缓存。

最佳答案

我不明白问题是什么。替换缓存项后,客户端将提取新的缓存项。在那之前,他们将提取旧的缓存项。

他们永远不会返回空缓存项,除非您实际从缓存中删除该项然后替换它。

如果 EHCache 像那样工作,我会认为它从根本上被破坏了,因为它是线程安全的!

关于java - 原子写入 ehcache,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2559679/

相关文章:

java - 如何在 jar 文件上远程执行方法

java - 该代码适用于notifyAll,但不适用于notify

python - 如何将循环应用于 python 中的多线程

c++ - 缓存行对齐(需要在文章中说明)

java - Zookeeper curator缓存如何等待同步?

javascript - 是否可以在不将视频文件添加到 DOM 的情况下预加载和缓存视频文件?

java - 无法通过 phoenix 连接到 hbase

Java 8 Update 71 正在尝试安装新的辅助工具。 (在 Mac 上)

java - 直接从intelliJ在系统终端上运行java程序?

java - 如何在并发线程中操作 "ConcurrentModificationException"和 `values()` 时避免 HashMap `put()`?