
阿里云2020年云购买旺季爆炸性产品,低至40%的折扣,点击购买! >>> 
使用Spring AOP配置和管理您的二级缓存(EHCache)记录以进行查询使用Spring AOP配置和管理您的二级缓存(EHCache)如果我们的项目使用Spring + hibernate构建,就缓存而言首先,我们将想到Spring自己的EHCache缓存工具,该工具在Spring中集成了当前流行的缓存策略EHCache. 现在有更多的使用,例如OSCache,MemCached. 这些应该是最常用的缓存工具. 在Spring + hibernate这样的框架中,EHCache应该属于二级缓存. 我们知道默认情况下在Hibernate(即Session)中使用了一级缓存. 辅助缓存应在SessionFactory的范围内. 默认情况下,二级缓存不起作用,这需要我们进行简单的配置. 在配置它之前,让我指出,缓存可以从理论上提高您的网站系统的性能,但是前提是必须确保您具有良好的体系结构设计. 例如,对于使用Spring + Hibernate构建的系统,如果使用单个服务器,请使用Spring随附的EHCache进行二级缓存. 如果您的系统是具有多个服务器的分布式系统,则MemCached是最佳选择. 一般来说,MemCached正在缓存. 它具有比EHCache和OSCache更好的性能,但不是所有网站. MemCached可以事半功倍. 尽管更好,但前提是您必须有多个分布的服务器.
使用MemCached的系统的性能必须正常. 因为Memcached是一个“分布式”内存对象缓存系统,也就是说,那些不需要“分布”,不需要共享或足够小而只有一个服务器的应用程序,MemCached不会带来任何好处. 相反,这也会降低系统效率,因为网络连接也需要资源. OSCache是限制较少的缓存机制. 它类似于EHCache. 将EHCache集成到Spring + Hibernate中仅需三个简单步骤. 步骤1: 默认情况下,配置缓存文件ehcache.xml并将其放置在src目录中. 这是简单的配置. Xml代码具有默认的缓存配置和我们自己配置的缓存. 如果未在应用程序中指定缓存,则默认情况下将使用默认配置属性. 步骤2: 在Spring中使用强大的机制来设计面向方面的AOP. 编写两个类文件,MethodCacheAfterAdvice.java(主要是脏东西的同步更新)和MethodCacheInterceptor.java(主要使用来缓存对象被缓存和缓存). 的实现机制实际上是我们常用的过滤器. 它的作用与过滤器相同. 这是两个文件. MethodCacheInterceptor.java Java代码公共类MethodCacheInterceptor实现MethodInterceptor,InitializingBean {私有静态最终Log logger = LogFactory .getLog(MethodCacheInterceptor.class);专用缓存缓存; public void setCache(缓存缓存){this.cache = cache;} public MethodCacheInterceptor(){super();} / ** *拦截Service / DAO并查找结果是否存在的方法,如果存在,则返回缓存,否则,返回查询结果并将查询结果放入缓存* /公共对象调用(MethodInvocation调用)抛出Throwable {String targetName = invocation.getThis(). getClass(). getName();字符串methodName = invocation.getMethod(). getName();对象[]参数= invocation.getArguments();对象结果; logger.debug(“从缓存中查找对象是” + cache.getName());字符串cacheKey = getCacheKey(targetName,methodName,参数);元素element = cache.get(cacheKey); long startTime =系统. currentTimeMillis(); if(element == null){logge r .debug(“保持方法,获取方法结果并创建缓存........!”);结果= invocation.proceed(); element = new Element(cacheKey,(Serializable)result);缓存. 放置(元素); long endTime = System.currentTimeMillis(); logger.info(targetName +“. ” + methodName +“该方法首先被调用并缓存.
耗时的“ +(endTime-startTime)+” ms“ +” cacheKey: “ + element.getKey());}其他{long endTime = System.currentTimeMillis(); logger.info(targetName +”. “ + methodName +“直接从缓存中调用结果. 非常耗时” +(endTime-startTime)+“ ms” +“ cacheKey: ” + element.getKey());}返回element.getValue();} / * * *获取缓存键的方法. 缓存键是缓存中元素的唯一标识符. 缓存键包括包名+类名+方法名+参数* /私有String getCacheKey(String targetName,String methodNameehcache spring aop,对象[]参数){StringBuffer sb = new StringBuffer(); sb.append(targetName).append(“. ”). append(methodName); if(((arguments!= null)&&(arguments.length!= 0) ){for(int i = 0; i 耗时的“ +(endTime-startTime)+” ms“ +” cacheKey: “ + element.getKey());}其他{long endTime = System.currentTimeMillis(); logger.info(targetName +”. “ + methodName +“直接从缓存中调用结果. 非常耗时” +(endTime-startTime)+“ ms” +“ cacheKey: ” + element.getKey());}返回element.getValue();} / * * *获取缓存键的方法. 缓存键是缓存中元素的唯一标识符. 缓存键包括包名+类名+方法名+参数* /私有String getCacheKey(String targetName,String methodName,对象[]参数){StringBuffer sb = new StringBuffer(); sb.append(targetName).append(“. ”). append(methodName); if(((arguments!= null)&&(arguments.length!= 0) ){for(int i = 0; i 另一个InitializingBean(Initializing Bean),它主要在方法调用后执行简单检查,并且主要实现是在afterPropertiesSet()中编写的. MethodCacheAfterAdvice .java Java代码公共类MethodCacheAfterAdvice实现AfterReturningAdvice,InitializingBean {私有静态最终Log logger = LogFactory .getLog(MethodCacheAfterAdvice.class);专用缓存缓存;公共无效setCache(缓存缓存){this.cache = cache;}公共MethodCacheAfterAdvice(){super();}公共无效afterReturning(对象arg0,方法arg1,对象[] arg2,对象arg3)抛出Throwable {String className = arg3 .getClass(). getName();列表清单= cache.getKeys(); for(int i = 0;我 PROPAGATION_REQUIRED PROPAGATION_REQUIRED PROPAGATION_REQUIRED PROPAGATION_REQUIRED,只读 PROPAGATION_REQUIRED,只读 classpath: ehcache.xml DEFAULT_CACHE . * 找. *. *得到. * . * 创建. *. *更新. *. *删除. * * DAO methodCachePointCutmethodCachePointCutAdvicetransactionInterceptor PROPAGATION_REQUIRED PROPAGATION_REQUIRED PROPAGATION_REQUIRED PROPAGATION_REQUIRED,只读 PROPAGATION_REQUIRED,只读 classpath: ehcache.xml DEFAULT_CACHE . * 找. *. *得到. * . * 创建. *. *更新. *. *删除. * * DAO methodCachePointCutmethodCachePointCutAdvicetransactionInterceptor 以上,我拦截并缓存了DAO层. 最好在业务层进行拦截. 您可以根据系统进行设计. 如果没有业务层ehcache spring aop,则也可以在DAO层进行拦截. 的. 拦截是使用正则表达式配置的. find和get方法仅被缓存. 如果创建,更新和删除方法用于高速缓存同步. 对于某些频繁的操作,最好不要使用缓存,缓存的作用是使那些不经常更改的操作成为可能. 仅需三个简单步骤即可完成EHCache. 最好自己尝试一下. 我没有详细解释该方法. 实际上,这非常简单. 我带来的不便表示歉意. 文章来源: DIY部落() 原始链接:



本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-145387-1.html
而更多的国家就看到美国在世界的霸权是多么让人讨厌