为了便于说明,我使用了类似地图的缓存:
value = Cache.get(key)比EHCache2更常见
Element
选项1:构造复合键对象
class CustomerConfigurationKey { String customerKey; String dataEntityKey; // equals() and hashCode() }这是相当标准的键/值存储库,包括纯地图。我确实在cache2k快速入门中解决了这个问题。
选项2:使用多级缓存
将一个缓存放入一个缓存中,并进行如下访问:
data.get(customerKey).get(dataEntityKey)。
您可以在cache2k基准测试DateFormattingBenchmark中找到“复合键”与“多级缓存”的示例
仅当您在第一级有少量设置时,这才可以很好地工作。在您的情况下,您最终将为每个客户提供单独的缓存,这将导致成本高昂。因此,这仅出于完整性考虑,在您的方案中没有实际选择。
选项3:将地图用于第二层
使用构建单个缓存
Cache<String, Map<String, JSONObject>。
如果通常在短时间间隔内使用所有客户数据,则在更细的级别上进行缓存是没有意义的,因为客户的所有数据通常都会存储在内存中。另一个示例:当客户不再处于活动状态时,缓存将过期,并且可以从内存中删除所有客户数据。
更新映射的单个条目将具有您需要正确解决的并发问题,例如,通过在缓存中仅复制并放置不可变的映射或使用
ConcurrentHashMap。



