当前位置: 首页 > news >正文

网站建设项目说明书模板广西建设厅考试网站首页

网站建设项目说明书模板,广西建设厅考试网站首页,微信 wordpress搜索,建设一个网站要花多少时间带你一起从零基础进行分析和开发Ehcache框架的实战指南#xff08;Spring整合ehcache#xff09; 回顾一下Ehcache主要的特性 Spring框架所支持的第三方缓存Spring Cache的实现方式Spring Cache基本准备工作定义Ehcache配置文件启用Spring-CacheXML风格的xml代码 JavaConfig注… 带你一起从零基础进行分析和开发Ehcache框架的实战指南Spring整合ehcache 回顾一下Ehcache主要的特性 Spring框架所支持的第三方缓存Spring Cache的实现方式Spring Cache基本准备工作定义Ehcache配置文件启用Spring-CacheXML风格的xml代码 JavaConfig注解风格java代码 使用注解声明的方式Spring缓存注解Cacheable的用法Cacheable的定义Cacheable支持的参数Cacheable的使用案例value属性指定Cache名称使用key属性自定义key Spring缓存注解CacheEvict的用法CacheEvict 支持如下几个参数CacheEvict的使用案例 Spring缓存注解CachePut的用法CachePut的使用案例CachePut注解Java代码 Java代码 Cache的运行流程 回顾一下Ehcache Ehcache是一个纯Java的进程内缓存框架具有快速、精干等特点是Hibernate中默认的CacheProvider广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。它具有内存和磁盘存储缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持REST和SOAP api等特点。 Ehcache最初是由Greg Luck于2003年开始开发2009年,该项目被Terracotta购买。软件仍然是开源,但一些新的主要功能(例如快速可重启性之间的一致性的)只能在商业产品中使用例如Enterprise EHCache and BigMemory。,维基媒体Foundationannounced目前使用的就是Ehcache技术。 主要的特性 快速简单多种缓存策略缓存数据有两级内存和磁盘因此无需担心容量问题缓存数据会在虚拟机重启的过程中写入磁盘可以通过RMI、可插入API等方式进行分布式缓存具有缓存和缓存管理器的侦听接口支持多缓存管理器实例以及一个实例的多个缓存区域提供Hibernate的缓存实现 Spring框架所支持的第三方缓存 Spring引入了对Cache的支持。其使用方法和原理都类似于Spring对事务管理的支持。 Spring Cache是作用在方法上的其核心思想是这样的当我们在调用一个缓存方法时会把该方法参数和返回结果作为一个键值对存放在缓存中等到下次利用同样的参数来调用该方法时将不再执行该方法而是直接从缓存中获取结果进行返回。所以在使用Spring Cache的时候我们要保证我们缓存的方法对于相同的方法参数要有相同的返回结果。 spring的modules包中提供对许多第三方缓存方案的支持包括 EHCacheOSCache(OpenSymphony)JCSGigaSpacesJBoss Cache 接下来通过例举EHCache和OSCache详细介绍如何使用spring配置基于注解的缓存配置注意这里的缓存是方法级的。将这些第三方缓存方案配置在spring中很简单网上有许多介绍这里只重点介绍如何配置基于注解的缓存配置。 Spring Cache的实现方式 Spring Cache需要我们做两方面的事 声明某些方法使用缓存基于注解的支持。配置Spring对Cache的支持它和Spring对事务管理的支持一样Spring对Cache的支持也有基于注解和基于XML配置两种方式。 Spring Cache基本准备工作 定义Ehcache配置文件 ?xml version1.0 encodingUTF-8? ehcache xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:noNamespaceSchemaLocationhttp://ehcache.org/ehcache.xsd updateCheckfalse dynamicConfigfalse monitoringautodetect diskStore pathjava.io.tmpdir / !-- diskStore path:用来配置磁盘缓存使用的物理路径 name: 缓存名称,cache的唯一标识(ehcache会把这个cache放到HashMap里) eternalfalse 元素是否永恒,如果是就永不过期(必须设置) maxElementsOnDisk磁盘缓存中最多可以存放的元素数量,0表示无穷大 maxElementsInMemory1000 内存缓存中最多可以存放的元素数量(必须设置) timeToIdleSeconds0 导致元素过期的访问间隔(秒为单位). 0表示可以永远空闲,默认为0 timeToLiveSeconds600 元素在缓存里存在的时间(秒为单位). 0 表示永远存在不过期 overflowToDiskfalse 当缓存达到maxElementsInMemory值是,是否允许溢出到磁盘(必须设置) diskPersistentfalse 磁盘缓存在VM重新启动时是否保持(默认为false) diskExpiryThreadIntervalSeconds100 磁盘失效线程运行时间间隔,默认是120秒 memoryStoreEvictionPolicyLFU 内存存储与释放策略.当达到maxElementsInMemory时共有三种策略,分别为LRU(最近最少使用)、LFU(最常用的)、FIFO(先进先出)默认使用最近使用策略 -- defaultCache eternalfalse maxElementsInMemory3000 timeToIdleSeconds3600 timeToLiveSeconds0 overflowToDisktrue diskPersistentfalse diskExpiryThreadIntervalSeconds100 memoryStoreEvictionPolicyLRU/ cache namepropConfigCache eternalfalse maxElementsInMemory3000 overflowToDisktrue timeToIdleSeconds0 timeToLiveSeconds1440 memoryStoreEvictionPolicyLFU/ cache nameworkTimeCache eternalfalse maxElementsInMemory3000 overflowToDisktrue timeToIdleSeconds0 timeToLiveSeconds1440 memoryStoreEvictionPolicyLFU/ cache namethreeInOneCache eternalfalse maxElementsInMemory3000 overflowToDisktrue timeToIdleSeconds0 timeToLiveSeconds1440 memoryStoreEvictionPolicyLFU/ cache nametransferCache eternalfalse maxElementsInMemory1000 overflowToDisktrue timeToIdleSeconds0 timeToLiveSeconds1440 memoryStoreEvictionPolicyLFU/ cache namethreeInOneFavCache eternalfalse maxElementsInMemory3000 overflowToDisktrue timeToIdleSeconds0 timeToLiveSeconds1440 memoryStoreEvictionPolicyLFU/ cache namereserveTimeCache eternalfalse maxElementsInMemory3000 overflowToDisktrue timeToIdleSeconds0 timeToLiveSeconds1440 memoryStoreEvictionPolicyLFU/ cache namemqServerNameCache eternalfalse maxElementsInMemory3000 overflowToDisktrue timeToIdleSeconds0 timeToLiveSeconds1440 memoryStoreEvictionPolicyLFU/ cache nameschWorkTimeCache eternalfalse maxElementsInMemory3000 overflowToDisktrue timeToIdleSeconds0 timeToLiveSeconds1440 memoryStoreEvictionPolicyLFU/ !-- diskStore pathjava.io.tmpdir /-- diskStore pathE:/cachetmpdir/ defaultCache maxElementsInMemory10000 eternalfalse timeToIdleSeconds120 timeToLiveSeconds120 overflowToDisktrue maxElementsOnDisk10000000 diskPersistentfalse diskExpiryThreadIntervalSeconds120 memoryStoreEvictionPolicyLRU / cache nameandCache maxElementsInMemory10000 maxElementsOnDisk1000 eternalfalse overflowToDisktrue diskSpoolBufferSizeMB20 timeToIdleSeconds300 timeToLiveSeconds600 memoryStoreEvictionPolicyLFU / /ehcache 启用Spring-Cache XML风格的 xml代码 启用缓存注解功能这个是必须的否则注解不会生效另外该注解一定要声明在spring主配置文件中才会生效。 cache:annotation-driven cache-managercacheManager proxy-target-classtrue/ spring自己的换管理器这里定义了两个缓存位置名称 既注解中的value bean idcacheManager classorg.springframework.cache.support.SimpleCacheManager property namecaches set bean classorg.springframework.cache.concurrent.ConcurrentCacheFactoryBean p:namedefault / bean classorg.springframework.cache.concurrent.ConcurrentCacheFactoryBean p:nameandCache / /set /property /bean另外还可以指定一个 key-generator即默认的key生成策略。接下来说说对ehcache的支持其实只需要把cacheManager换成EHCache的cacheManager即可如下 cacheManager工厂类指定ehcache.xml的位置 bean idcacheManagerFactory classorg.springframework.cache.ehcache.EhCacheManagerF actoryBean p:configLocationclasspath:/config/ehcache.xml / !-- 声明cacheManager -- bean idcacheManager classorg.springframework.cache.ehcache.EhCacheCacheManager p:cacheManager-refcacheManagerFactory / JavaConfig注解风格 java代码 Configuration ComponentScan(basePackages com.xxx.xxx) EnableCaching(proxyTargetClass true) public class CacheConfiguration implements CachingConfigurer { Bean Override public CacheManager cacheManager() { try { net.sf.ehcache.CacheManager ehcacheCacheManager new net.sf.ehcache.CacheManager(new ClassPathResource(ehcache.xml).getInputStream()); EhCacheCacheManager cacheCacheManager new EhCacheCacheManager(ehcacheCacheManager); return cacheCacheManager; } catch (IOException e) { throw new RuntimeException(e); } } Bean Override public KeyGenerator keyGenerator() { return new SimpleKeyGenerator(); } } 使用EnableCaching启用Cache注解支持实现CachingConfigurer然后注入需要的cacheManager和keyGenerator从spring4开始默认的keyGenerator是SimpleKeyGenerator 使用注解声明的方式 Spring为我们提供了几个注解来支持Spring Cache。其核心主要是Cacheable和CacheEvict。使用Cacheable标记的方法在执行后Spring Cache将缓存其返回结果而使用CacheEvict标记的方法会在方法执行前或者执行后移除Spring Cache中的某些元素。下面我们将来详细介绍一下Spring基于注解对Cache的支持所提供的几个注解。 Spring缓存注解Cacheable的用法 Cacheable的定义 Cacheable负责将方法的返回值加入到缓存中 Cacheable可以标记在一个方法上也可以标记在一个类上。当标记在一个方法上时表示该方法是支持缓存的当标记在一个类上时则表示该类所有的方法都是支持缓存的。 支持缓存的方法Spring会在其被调用后将其返回值缓存起来以保证下次利用同样的参数来执行该方法时可以直接从缓存中获取结果而不需要再次执行该方法。Spring在缓存方法的返回值时是以键值对进行缓存的值就是方法的返回结果。缓存键处理Spring又支持两种策略默认策略和自定义策略这个稍后会进行说明。需要注意的是当一个支持缓存的方法在对象内部被调用时是不会触发缓存功能的。Cacheable可以指定三个属性value、key和condition。 不过在实际开发中我们往往是通过Spring的Cacheable来实现数据的缓存的所以本文给大家详细介绍一下Cacheable的用法。 Cacheable支持的参数 value缓存位置名称不能为空如果使用Ehcache就是ehcache.xml中声明的cache的namekey缓存的key默认为空既表示使用方法的参数类型及参数值作为key支持SpELcondition触发条件只有满足条件的情况才会加入缓存默认为空既表示全部都加入缓存支持SpEL Cacheable的使用案例 //将缓存保存进andCache并使用参数中的userId加上一个字符串(这里使用方法名称)作为缓存的key Cacheable(valueandCache,key#userId findById) public SystemUser findById(String userId) { SystemUser user (SystemUser) dao.findById(SystemUser.class, userId); return user ; } //将缓存保存进andCache并当参数userId的长度小于32时才保存进缓存默认使用参数值及类型作为缓存的key Cacheable(valueandCache,condition#userId.length 32) public boolean isReserved(String userId) { System.out.println(hello andCacheuserId); return false; } value属性指定Cache名称 value属性是必须指定的其表示当前方法的返回值是会被缓存在哪个Cache上的对应Cache的名称。其可以是一个Cache也可以是多个Cache当需要指定多个Cache时其是一个数组。 Cacheable(cache1)//Cache是发生在cache1上的public User find(Integer id) {Return null;}Cacheable({cache1, cache2})//Cache是发生在cache1和cache2上的public User find(Integer id) {Return null;} 使用key属性自定义key key属性是用来指定Spring缓存方法的返回结果时对应的key的。该属性支持SpringEL表达式。当我们没有指定该属性时Spring将使用默认策略生成key。我们这里先来看看自定义策略至于默认策略会在后文单独介绍。 自定义策略是指我们可以通过Spring的EL表达式来指定我们的key。这里的EL表达式可以使用方法参数及它们对应的属性。 使用方法参数时我们可以直接使用“#参数名”或者“#p参数index”。下面是几个使用参数作为key的示例。 Cacheable(valueusers, key#id)public User find(Integer id) {return null;}Cacheable(valueusers, key#p0)public User find(Integer id) {return null;}Cacheable(valueusers, key#user.id)public User find(User user) {return null;}Cacheable(valueusers, key#p0.id)public User find(User user) {return null;Spring缓存注解CacheEvict的用法 CacheEvict负责清除缓存 CacheEvict 支持如下几个参数 value缓存位置名称不能为空同上key缓存的key默认为空同上condition触发条件只有满足条件的情况才会清除缓存默认为空支持SpELallEntriestrue表示清除value中的全部缓存默认为false CacheEvict的使用案例 //清除掉指定key的缓存 CacheEvict(valueandCache,key#user.userId findById) public void modifyUserRole(SystemUser user) { System.out.println(hello andCache deleteuser.getUserId()); } //清除掉全部缓存 CacheEvict(valueandCache,allEntriestrue) public void setReservedUsers() { System.out.println(hello andCache deleteall); } 一般来说我们的更新操作只需要刷新缓存中某一个值所以定义缓存的key值的方式就很重要最好是能够唯一因为这样可以准确的清除掉特定的缓存而不会影响到其它缓存值 。比如我这里针对用户的操作使用(userId方法名称)的方式设定key值。 Spring缓存注解CachePut的用法 应用到写数据的方法上如新增/修改方法调用方法时会自动把相应的数据放入缓存 CachePut的使用案例 CachePut(value user, key #user.id) public User save(User user) { users.add(user); return user; } 即调用该方法时会把user.id作为key返回值作为value放入缓存 CachePut注解 Java代码 public interface CachePut { String[] value(); //缓存的名字可以把数据写到多个缓存 String key() default ; //缓存key如果不指定将使用默认的KeyGenerator生成后边介绍 String condition() default ; //满足缓存条件的数据才会放入缓存condition在调用方法之前和之后都会判断 String unless() default ; //用于否决缓存更新的不像condition该表达只在方法执行之后判断此时可以拿到返回值result进行判断了 } Java代码 除了这些默认的Cache之外我们可以写自己的Cache实现而且即使不用之后的Spring Cache注解我们也尽量使用Spring Cache API进行Cache的操作如果要替换底层Cache也是非常方便的。到此基本的Cache API就介绍完了接下来我们来看看使用Spring Cache注解来简化Cache的操作。 Cache的运行流程 首先执行CacheEvict如果beforeInvocationtrue且condition 通过如果allEntriestrue则清空所有接着收集Cacheable如果condition 通过且key对应的数据不在缓存放入cachePutRequests也就是说如果cachePutRequests为空则数据在缓存中如果cachePutRequests为空且没有CachePut操作那么将查找Cacheable的缓存否则result缓存数据也就是说只要当没有cache put请求时才会查找缓存如果没有找到缓存那么调用实际的API把结果放入result如果有CachePut操作(如果condition 通过)那么放入cachePutRequests执行cachePutRequests将数据写入缓存unless为空或者unless解析结果为false执行CacheEvict如果beforeInvocationfalse 且 condition 通过如果allEntriestrue则清空所有 流程中需要注意的就是2/3/4步 如果有CachePut操作即使有Cacheable也不会从缓存中读取问题很明显如果要混合多个注解使用不能组合使用CachePut和Cacheable
http://www.sczhlp.com/news/160910/

相关文章:

  • 对网站建设的看法旅游类网站建设受众分析
  • 每年网站备案抽查wordpress站点一百数据卡不
  • 中国建设银行官网站u盾证书网站开发建设属于什么费用
  • 宁波网站建设多少钱一年wordpress网站发布时间
  • c2c电子商务网站策划东莞网站优化是什么
  • 网站建设课本江苏网站建设流程
  • 公司网站建设要注意什么网络流量分析工具
  • 设计产品网站推荐wordpress raw
  • 律师微网站制作建设网站包维护
  • 空间网站大全好搜seo软件
  • django网站开发规范建设网站费用如何做账
  • 全国企业信用信息公示系统网站网站如何判断做的好不好
  • 中国制造网建站企业集团网站源码
  • 做网站怎么挣钱最快北龙建设集团网站
  • 网站开发流程记住吧湖北短视频seo营销
  • 简述建设电子商务网站步骤保定门户网站
  • 固定ip如何做网站服务器wordpress邮箱内容更改
  • 网站建设 归为会计哪一类企业网站的内容营销
  • 做一个网站建设的流程中小型网站建设公司
  • 深圳网站建设 设计首选公司济南网络优化网站
  • 网站续费协议南通长城建设集团有限公司网站
  • 百度云搜索引擎网站怎么做仲博注册网站
  • 门户网站建设检察建设银行大连招聘网站
  • 自己怎样给网站做推广大安网站建设
  • 报关做业务可以上哪些网站做网站模板出售类网站怎么样
  • 创意设计网站装修之家
  • 并查集 D. Shark [Codeforces Round 484(Div. 2)]
  • 实用指南:Spark核心技术解析:从RDD到Dataset的演进与实践
  • 随笔0
  • 长沙市建设局网站电子商务平台icp备案证明