首页 文章

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

提问于
浏览
7

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

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

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

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

任何见解或提示都表示赞赏!

3 回答

  • 3

    也许isKeyInCache

  • 2

    可以通过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

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

  • 0

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

相关问题