hibernate 使用 memcached 开启二级缓存

现在的项目配置的是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本生的配置可以完全独立


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值