我在java中有以下语句,调用500次,大约需要5分钟才能完成:
List<Items> itemList = session.createCriteria(Items.class)
.add(Restrictions.eq("id", itemID))
.setCacheable(true).setCacheRegion("query.DBMSItems")
.list();
我设置了配置:
<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
<property name="hibernate.cache.use_second_level_cache">true</property>
<property name="hibernate.cache.use_query_cache">true</property>
并在缓存中:
<cache
name="query.DBMSItems"
maxElementsInMemory="500000"
eternal="false"
timeToIdleSeconds="6000"
timeToLiveSeconds="60000"
overflowToDisk="false"
statistics="true" />
因此看起来缓存不起作用。
对于为什么会发生这种情况的任何解释都将不胜感激。
答案 0 :(得分:0)
在二级缓存中,您将查询缓存为关键字,将结果缓存为值。如果您将使用不同的参数执行查询,则每个查询将首先针对数据库执行并花费所需的时间,然后它将返回值并将正确的键值对存储在缓存中,并在几次调用时查询具有相同的参数然后它将转到二级缓存。
更好的解决方案是首先缓存数据,然后对缓存中的数据执行查询。
答案 1 :(得分:0)