EHCache如何检查缓存中是否存在某些内容?

时间:2011-06-22 12:03:15

标签: java spring caching ehcache

有没有办法检查对象是否在EHCache托管缓存中?

我面临的挑战是我实现了一种从数据库中检索单个值的方法(find(key)方法)。 EHCache很好地缓存了find方法的结果,但现在我想减少多次调用该方法导致的sql查询数。

所以实现这个我们实现了一个新方法,因为参数需要一个键列表,但由于每个方法调用的参数不同,EHCache在缓存结果方面做得不好。 EHCache使用方法参数作为缓存的入口点。

所以我想重新设计一些东西。我的想法是,我在查找(键列表)方法中获取参数,执行一个大的SQL查询,然后将结果填入缓存中,我没有把头包裹起来,但是在写下来之后感觉就像手动修改缓存也是不行......

非常感谢任何见解或提示!

3 个答案:

答案 0 :(得分:3)

可以通过jmx访问hibernate statistics + ehcache stats等。 EhcacheHibernateMBean是通过jmx公开所有API的主界面。它基本上扩展了两个接口--EhcacheStats和HibernateStats。顾名思义,EhcacheStats包含与Hibernate相关的Ehcache和HibernateStats相关的方法。您可以看到缓存命中/未命中/放置速率,动态更改配置元素值 - 如maxElementInMemory,TTI,TTL,启用/禁用统计信息收集等以及各种其他内容。通过在Hibernate配置中启用二级缓存时将tc.active添加为“true”系统属性,可以在LocalSessionFactoryBean上覆盖buildSessionFactory()方法来实现这一点

  @Override
        protected SessionFactory buildSessionFactory() throws Exception {
                Properties properties = this.getHibernateProperties();
                String secondLevelCache = (String) properties
                                .get("hibernate.cache.use_second_level_cache");
                if (secondLevelCache.equals("true")) {
                        System.setProperty("tc.active", "true");
                }
                return super.buildSessionFactory();
        }

当您通过JMX访问应用程序时,请转到选项卡Mbeans,在左侧转到net.sf.ehcache.hibernate - > net.sf.ehcache.Cachemanager @ ..

在此下转到属性。 单击属性,在右侧,检查RegionCacheAttriutes。

enter image description here

注意:视图已随JDK1.7更改。登录JMX控制台后,导航到Mbeans选项卡下的net.sf.ehcache.hibernate。单击CacheRegionStats单击它将打开,打开右侧的屏幕。双击顶部,它会显示表格导航,如下所示。您必须在表格导航中导航才能找到您感兴趣的任何对象的数量。

答案 1 :(得分:2)

也许是isKeyInCache

答案 2 :(得分:0)

你看过SelfPopulatingCache and or BlockingCache了吗?在启动数据库检索之后,它们将阻止所有辅助请求者,直到填充缓存