gpt4 book ai didi

java - 对于多级进程内缓存来说,更好的选择是什么?

转载 作者:行者123 更新时间:2023-11-30 02:45:32 24 4
gpt4 key购买 nike

在我的 Spring Boot 应用程序中,我需要实现进程内多级缓存以下是需要缓存的数据示例:

客户名称(键,字符串) --数据实体名称(键、字符串) --config-1(值,JSONObject) --config-2(值,JSONObject)

我计划有数百个客户条目,每个条目最多有一百个“配置”JSONObjects

我目前正在查看 ehcache:

Cache cache = manager.getCache("sampleCache1");
Element element = new Element("key1", "value1");
cache.put(element);

在这种情况下,我将使用“Customer_Name”代替“key1”,使用“My Customer”代替“value1”,但我需要构建一个层次结构:

customer
-data entity
-config

我不知道如何使用 ehcache 来做到这一点。我也不确定对于我正在尝试做的事情是否有更好的选择。

有人用ehcache或任何其他库实现了这样的多级分层缓存吗?

最佳答案

对于符号,我使用类似 map 的缓存:value = Cache.get(key)这比 EHCache2 更常见 Element

选项 1:构造复合键对象

 class CustomerConfigurationKey {
String customerKey;
String dataEntityKey;
// equals() and hashCode()
}

这是非常标准的键/值存储,包括普通映射。我确实在 cache2k Quick Start 中解决了这个问题.

选项 2:使用多级缓存

将缓存放入缓存并访问,例如:data.get(customerKey).get(dataEntityKey)

您可以在 cache2k benchmarks DateFormattingBenchmark 中找到“复合键”与“多级缓存”的示例

只有当你在第一级有一个小集合时,这才有效。在您的情况下,您最终会为每个客户提供单独的缓存,这是昂贵的。因此,这只是为了完整性,在您的场景中没有真正的选择。

选项 3:在第二层使用 map

使用 Cache<String, Map<String, JSONObject> 构建单个缓存.

如果通常在短时间内使用所有客户数据,则在更精细的级别上缓存没有意义,因为无论如何客户的所有数据通常都在内存中。另一个例子:当客户不再活跃时,缓存将过期,所有客户数据都可能从内存中删除。

更新 map 的单个条目会产生并发问题,您需要正确解决这些问题,例如通过复制不可变映射并将其仅放入缓存中或使用 ConcurrentHashMap .

关于java - 对于多级进程内缓存来说,更好的选择是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40296338/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com