Java 使用JCache实现保存条目顺序
我想将内容缓存在一个DB表中,如下所示,在JavaEE应用服务器的Java堆上Java 使用JCache实现保存条目顺序,java,jcache,Java,Jcache,我想将内容缓存在一个DB表中,如下所示,在JavaEE应用服务器的Java堆上 | group | key | value | | ------- | ------- | -------------------------------------- | | CHAR(3) | CHAR(5) | VARCHAR(256) | | ------- | ------- |
| group | key | value |
| ------- | ------- | -------------------------------------- |
| CHAR(3) | CHAR(5) | VARCHAR(256) |
| ------- | ------- | -------------------------------------- |
| 001 | 0 | male |
| 001 | 1 | female |
| 001 | 9 | other |
| 002 | 004 | Afghanistan |
| 002 | 008 | Albania |
| 002 | 010 | Antarctica |
| 002 | 012 | Algeria |
| ... | ... | ... |
| 003 | LAX | Los Angeles International Airport |
| 003 | SIN | Singapore Changi International Airport |
| ... | ... | ... |
我认为JCache是实现这些目的最常用的方法,但是如何在缓存中保存这些记录的顺序,比如LinkedHashMap
(特定JCache实现的配置是可以接受的。)
编辑
这是我现在正在开发的传统企业应用程序中的一个典型的真正的查找表(OTLT)。主排序键为组
,次排序键为键
OTLT在性能上有一些缺点,因此我想使用缓存机制来解决这些缺点。由于您需要缓存看起来像地图模型的东西,我建议您也考虑您的访问模式(即应用程序读取这些数据的方式)。我的猜测是,您需要对这些数据做两件事:
缓存
结构来实现。使用组
作为缓存的键,并使用该组中所有键
->值
映射的LinkedHashMap
作为缓存的值。在这种安排中,要求1通过在缓存中的一次查找来满足,而要求2通过在缓存中的一次查找来满足(以获得LinkedHashMap
键->值映射)和在LinkedHashMap
中的另一次查找来满足。请注意,您可以使用TreeMap
,而不是LinkedHashMap
作为缓存的值类型,基本上任何维护迭代顺序的映射都可以
由于需求1,我将避免组/密钥损坏方案(例如使用group+“-”+key
作为缓存的密钥),因为这需要对缓存的条目集进行完整的迭代(使用cache.iterator()
)并对每个密钥进行模式匹配,以确定它是否属于您要查找的组
使用上述配置创建此类缓存的JCache标准方法如下:
MutableConfiguration<String, LinkedHashMap> config = new MutableConfiguration<String, LinkedHashMap>()
.setTypes(String.class, LinkedHashMap.class);
CachingProvider provider = Caching.getCachingProvider();
CacheManager defaultCacheManager = provider.getCacheManager();
Cache<String, LinkedHashMap> cache = defaultCacheManager
.createCache("cache", config);
MutableConfiguration=new MutableConfiguration()
.setTypes(String.class、LinkedHashMap.class);
CachingProvider provider=Caching.getCachingProvider();
CacheManager defaultCacheManager=provider.getCacheManager();
缓存=默认缓存管理器
.createCache(“缓存”,配置);
请注意,由于Java泛型的限制,无法执行以下操作:
MutableConfiguration<String, LinkedHashMap<String, String>> config = new MutableConfiguration<String, LinkedHashMap<String, String>()
.setTypes(String.class, LinkedHashMap<String, String>.class);
MutableConfiguration=new MutableConfiguration“order”基于某个“key”。Db表本身的意义与JChache相似。我猜,某些连接组+“字符串键”是您的JCache键???示例显示,您在“键”的类型方面有一些问题,不是字符串,不是数字。。。正如你所说的,就像在peachesJust中添加苹果一样,这个表格布局有点奇怪。但是这种OTLT样式的表经常出现在遗留企业应用程序中。我在问题中补充了一些信息。