Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用JCache实现保存条目顺序_Java_Jcache - Fatal编程技术网

Java 使用JCache实现保存条目顺序

Java 使用JCache实现保存条目顺序,java,jcache,Java,Jcache,我想将内容缓存在一个DB表中,如下所示,在JavaEE应用服务器的Java堆上 | group | key | value | | ------- | ------- | -------------------------------------- | | CHAR(3) | CHAR(5) | VARCHAR(256) | | ------- | ------- |

我想将内容缓存在一个DB表中,如下所示,在JavaEE应用服务器的Java堆上

| 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样式的表经常出现在遗留企业应用程序中。我在问题中补充了一些信息。