现在的项目配置的是memcached二级缓存,使用的是hibernate4.18版本
1.导入所需的jar包
commons-codec-1.10.jar
hibernate3-memcached-1.5.jar(hibernate3使用此包)
hibernate4-memcached-1.0.jar(hibernate4使用此包)
memcached-2.5.jar
slf4j-api-1.6.1.jar
spy-2.4.jar
2.修改applicationContext的hibernate配置
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">#{jdbc['hibernate.dialect']}</prop>
<prop key="hibernate.hbm2ddl.auto">#{jdbc['hibernate.hbm2ddl.auto']}</prop>
<prop key="hibernate.show_sql">#{jdbc['hibernate.show_sql']}</prop>
<prop key="hibernate.format_sql">#{jdbc['hibernate.format_sql']}</prop>
<prop key="hibernate.temp.use_jdbc_metadata_defaults">false</prop>
<!-- 缓存配置 -->
<prop key="hibernate.cache.use_query_cache">true</prop><!-- 开启缓存 -->
<prop key="hibernate.cache.use_second_level_cache">true</prop><!-- 开启二级缓存 -->
<!-- hibernate3 二级缓存提供类
<prop key="hibernate.cache.provider_class">
com.googlecode.hibernate.memcached.MemcachedCacheProvider
</prop>
-->
<!-- hibernate4 二级缓存提供类-->
<prop key="hibernate.cache.region.factory_class">
com.googlecode.hibernate.memcached.MemcachedRegionFactory
</prop>
<prop key="hibernate.cache.use_structured_entries">true</prop><!-- 结构化存储 -->
<prop key="hibernate.max_fetch_depth">3</prop>
<prop key="hibernate.memcached.servers">192.168.39.39:11211</prop><!-- 二级缓存服务器位置和端口 -->
<!-- 二级缓存前缀名称-->
<prop key="hibernate.cache.region_prefix">quality.cache.memcached</prop>
<prop key="hibernate.memcached.operationTimeout">5000</prop><!-- 操作超时时间,单位ms -->
<prop key="hibernate.memcached.cacheTimeSeconds">200</prop><!-- 缓存失效时间,单位秒 -->
</props>
</property>
3.测试缓存效果
hibernate使用缓存需2步
在实体类开启缓存,可以使用注解或hbm配置。因为项目中用的是注解,这里的是注解
@Entity
@cache(usage=CacheConcurrencyStrategy.READ_WRITE)
@Table(name="t_user")
public class User {
@Id
@Column(name="ID",length=32)
@GeneratedValue(generator="uuid")
@GenericGenerator(name="uuid",strategy="uuid")
private String id;
................
执行查询方法时开启缓存
@Override
public <T> List<T> findEntities(Class<T> c) {
String hql = "from "+c.getSimpleName();
Query query = getSession().createQuery(hql);
query.setCacheable(true);
return query.list();
}
这样就可以使用memcached二级缓存了,可以看到console只打印出一句查询sql。
注意:
hibernate.memcached.servers 可以配置多个server:用空格隔开,这多个server是类似集群的关系,但server本生的配置可以完全独立