使用Java查询结果缓存:有更好的方法吗?

时间:2012-12-14 06:48:21

标签: java

我有一个类ClassA,它调用另一个类(DAO)来获取查询结果。在特定的业务场景中,

ClassA使用查询参数调用DAO约20,000次。 除此之外,大约10,000次ClassA向DAO发送相同的查询参数集。显然,Resultset将是相同的,可以缓存。

以下是我实施的代码。

Class A

{

.
.
.
.

Map<String, CachData> cachDataMap= new HashMap<String, CachData>();

priavate void getQueryResults(String queryParam)    
{

try {


            Set<String> cacheSet = cachDataMap.keySet();
            CachData cachData = null;
            if(!cacheSet.contains(queryParam))
            {
                dao.getResuslts((queryParam)));
                cachData = new CachData();
                cachData.setResult0(__getStringResult(0));
                cachData.setResult1(__getStringResult(1));
                cachData.setResult2(__getStringResult(2));
                cachData.setResult3(__getStringResult(3));
                cachData.setResult4(__getStringResult(4));
                cachData.setResult5(__getStringResult(5));
                cachDataMap.put(queryParam, cachData);
            }else
            {
                cachData = cachDataMap.get(queryParam);
            }



        } catch(Exception e) {
            //handle here
        }


}

除了使用任何框架之外,我们还有其他更好的解决方案吗?更好的数据结构或更好的方法..为了获得良好的性能?

2 个答案:

答案 0 :(得分:1)

您可以使用ehcache

无论你做什么,都不要使用Map作为缓存的接口。一个好的缓存接口将允许实现清理缓存。地图合同不允许这样做。

根据实施情况,清理可以基于缓存中的时间,或者基于使用情况统计信息或内存可用性,......

您在此处使用的地图方法似乎很容易在较长时间内耗尽内存。

答案 1 :(得分:0)

您可以使用guava library中的表格,然后使用ehCache保存对象,并将密钥作为查询。