mybatis-ehcache配置

本文介绍了EhCache作为Java缓存框架的特点,包括内存存储、磁盘持久化,并对比了EhCache与Redis的区别。接着详细阐述了EhCache的XML配置、Spring配置及注解使用,最后讨论了Redis缓存的配置和实现,包括RedisCacheAdapter和RedisCacheManager的创建。
摘要由CSDN通过智能技术生成

1.介绍

EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点。Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持REST和SOAP api等特点。ehcache 对分布式支持不够好,多个节点不能同步,通常和redis一块使用
在vm重启后,持久化到磁盘的存储可以复原数据
ehcache直接在jvm虚拟机中缓存,速度快,效率高;但是缓存共享麻烦,集群分布式应用不方便。
redis是通过socket访问到缓存服务,效率比ecache低,比数据库要快很多,
处理集群和分布式缓存方便,有成熟的方案。如果是单个应用或者对缓存访问要求很高的应用,用ehcache。如果是大型系统,存在缓存共享、分布式部署、缓存内容很大的,建议用redis

2.ehcache.xml配置

ehchache节点
updateCheck属性,是否开启自动更新检查,默认true
dynamicConfig – 一个可选设置,设置ehcache启动后,缓存配置是否能动态改变,true:能,默认true。
子节点
diskStore
属性path :指定磁盘存储的位置
cache
自定的缓存,当自定的配置不满足实际情况时可以通过自定义(可以包含多个cache节点)
name : 缓存的名称,可以通过指定名称获取指定的某个Cache对象
maxElementsInMemory :内存中允许存储的最大的元素个数,0代表无限个
eternal :设置缓存中对象是否为永久的,如果是,超时设置将被忽略,对象从不过期。
overflowToDisk:内存不足时,是否启用磁盘缓存
diskPersistent:是否启用硬盘持久化缓存
timeToIdleSeconds:设置对象在失效前的允许闲置时间(单位:秒)为0表示无限长
timeToLiveSeconds :缓存数据的 生存时间(TTL)
memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。

<cache name="testCache" eternal="false"
           maxElementsInMemory="1000" overflowToDisk="false" diskPersistent="false"
           timeToIdleSeconds="0" timeToLiveSeconds="60"
           memoryStoreEvictionPolicy="LRU"/>

3.spring配置

<bean id="cacheManagerFactory"
		class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
		<property name="configLocation" value="classpath:ehcache.xml" />
	</bean>

	<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
		<property name="cacheManager" ref="cacheManagerFactory" />
	</bean>
<!-- 支持缓存注解 -->
	<cache:annotation-driven cache-manager="cacheManager" />

4.spring注解使用

Spring对缓存的支持类似于对事务的支持。
首先使用注解标记方法,相当于定义了切点,然后使用Aop技术在这个方法的调用前、调用后获取方法的入参和返回值,进而实现了缓存的逻辑。

@Cacheable
表明所修饰的方法是可以缓存的:当第一次调用这个方法时,它的结果会被缓存下来,在缓存的有效时间内,以后访问这个方法都直接返回缓存结果,不再执行方法中的代码段。
属性
value/cacheNames:指定缓存名,可以指定多个
key:显示指定 (最终生成的key为cacheNames+key)
unless:执行后判断不缓存的条件,当结果为 true 时,不缓存

@Cacheable(value = {
   "menuById"}, key = "#id", unless = "#result.type == 'folder'")
public Menu findById(String id)
{
   
	//仅支持查询
	return null;
}

@CachePut
与@Cacheable不同,@CachePut不仅会缓存方法的结果,还会执行方法的代码段。它支持的属性和用法都与@Cacheable一致。一个缓存后就不执行代码了,一个还要执行)
属性
value/cacheNames:指定缓存名,可以指定多个
key:显示指定 (最终生成的key为cacheNames+key)
unless:执行后判断不缓存的条件,当结果为 true 时,不缓存

@Cacheable(value = {
   "menuById"}, key = "#id", unless = "#result.type == 'folder'")
public Menu updateMenu
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值