【发布时间】:2018-03-15 21:00:57
【问题描述】:
我需要一些针对 java 的缓存解决方案。我需要用 1 小时驱逐存储 1 个 db 表的内容,然后清除所有值并再次从表中填充数据。
我正在研究番石榴缓存,但它似乎没有在 CacheLoader 中提供所需的 api。方法 CacheLoader.load 只填充 1 个值(所以我想同时填充所有值)并且 CacheLoader.loadAll 应该由 getAll 调用触发,即在我的情况下应该避免。
这是我想要的伪代码:
Cache<String, String> cache = CacheBuilder.newBuilder()
.expireAfterWrite(1, TimeUnit.HOURS)
.build(new CacheLoader<String, String> {
public Map<String, String> loadAll() {
// some logic for retrieving data from db
}
})
...
String value = cache.get(key)
this 可能重复。但它似乎很旧,并且不包含所需的解决方案。
我还有一个不同的用例,其中一些数据应该从网络服务器或文件系统上的文件中检索,所以我不想依赖任何特定于数据库的方法作为休眠缓存或类似的东西。
谢谢!
【问题讨论】:
-
Server 环境使用 JCache 更好。您可以使用 Ignite Apache 作为实现。
-
Apache Ignite 是外部数据网格,不是吗?我的意思是我想要更容易实现和部署的东西
-
我只需要带有驱逐时间支持和到期监听器的 ConcurrentHashMap
-
JCache 可以作为本地内存缓存(类似 Guava Cache)。非常容易使用。
-
好的,谢谢!可能我需要研究这种方法
标签: java guava memoization supplier