Java缓存策略
我有一个基于Grails框架的电子商务软件。现在,我们正在使用Hibernate二级缓存和Hazelcast(在Terracotta DSO之前)来分发服务器。这使我可以直接检索对象(这样我就可以调用Objet.get(id)),我将从Hibernate获取对象,而不是昂贵的数据库调用 我想知道“大”网站是如何做到这一点的?特别是对于附加了过滤器(如价格、排序、品牌)的类别页面,我的方法不再起作用了。什么是避免一直访问数据库的最佳策略?是将所有内容都放在内存中,并用Java而不是SQL查询进行排序/排序/筛选吗 谢谢你的反馈 更新:以下是ehcache.xml:Java缓存策略,java,hibernate,caching,grails,hazelcast,Java,Hibernate,Caching,Grails,Hazelcast,我有一个基于Grails框架的电子商务软件。现在,我们正在使用Hibernate二级缓存和Hazelcast(在Terracotta DSO之前)来分发服务器。这使我可以直接检索对象(这样我就可以调用Objet.get(id)),我将从Hibernate获取对象,而不是昂贵的数据库调用 我想知道“大”网站是如何做到这一点的?特别是对于附加了过滤器(如价格、排序、品牌)的类别页面,我的方法不再起作用了。什么是避免一直访问数据库的最佳策略?是将所有内容都放在内存中,并用Java而不是SQL查询进行排
<?xml version="1.0" encoding="UTF-8"?>
<ehcache name="Cache" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd">
<defaultCache maxEntriesLocalHeap="10000" timeToIdleSeconds="0"
timeToLiveSeconds="0">
<persistence strategy="distributed"/>
<elementValueComparator class="net.sf.ehcache.store.DefaultElementValueComparator"/>
<terracotta clustered="true">
<nonstop enabled="true" />
</terracotta>
</defaultCache>
<terracottaConfig rejoin="true" url="tcURL:9510" />
</ehcache>
如何在
Hibernate
中使用ehcache
作为二级缓存提供程序?可以阅读更多内容。我在Terracotta DSO中使用ehcache,但每次查询都会触及数据库,因此我的结论是它仅在您直接接收对象时有效,而不是用于查询(除了查询缓存,但这不是正确的做法,因为我们有很多事务,而且逐出也很昂贵)。您可以向我们展示您尝试过的ehcache配置文件ehcache.xml
和hibernate属性设置吗?这对您有很大帮助。谢谢,我已经用您要求的代码片段更新了我的帖子。我将查看教程,但据我所知,它也是关于查询缓存的?
hibernate {
cache.use_second_level_cache = true
cache.use_query_cache = false
cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory'
}