首页 > 其他分享 >如易云揭秘1-框架(cache)

如易云揭秘1-框架(cache)

时间:2023-06-05 11:35:59浏览次数:48  
标签:框架 spring cache 如易云 simpleName context 揭秘


Hibernate老鸟的话,对于Hibernate cache的精妙实现应该都是非常了解,即便不了解其实现原理,也知道Hibernate cache非常的易用,集成EhCache,对于系统性能也有很好的提升。那我们来看看如易云的框架,如易云的框架基于Mybatis,Mybatis新版本中也集成了cache,并且也有开源的分布式cache集成(例如: Mybatis-Ignite  https://github.com/mybatis/ignite-cache ),但如易云在数据库操作方面做了非常多的业务语义抽象(具体参见: 创易-数据库层设计 ),对于cache,当然一方面我希望在这个层面做下处理,另一方面就是 我之前在上家公司基于spring cache做的独有的两层cache(JVM+分布式cache,对开发人员透明,框架自动具备这样的能力 【这个以后的文章再表】),所以我们需要基于框架量身定做cache的集成。

      说到这里,不得不由衷的佩服spring boot确实不错,以前我还要基于spring cache 把guava cache和redis装进去,现在基于spring boot的 autoconfigure的cache封装,就可以很方便把这些用起来,关于 springboot的cache使用,请参见:http://www.jianshu.com/p/64f684bd0ce9    但麻烦的地方在于,我们的框架+代码自动生成,在整个体系里,默认的实现都在abstract抽象类,那么它只能做一次cacheNames的配置, 如果设置 cacheEvict(allEntries=true),会做全局的失效,而正常是这个模型内的缓存失效,好在 可以自定义 CacheResolver。



运行期动态设置cacheNames


      不过自定义的CacheResolver,需要注入cacheManager, 而cacheManager不能注入成功, 最终 使用 @Lazy,懒加载,并且 在spring boot应用启动时 将ApplicationContext 设置给ApplicationContextHolder,在 需要的时候获取到cachemanager设置给CacheResolver, 具体代码:


@Component("runtimeImplCacheResolver")
@Lazy
public classRuntimeImplCacheResolverextendsAbstractCacheResolver {
privateApplicationContextctx;
publicRuntimeImplCacheResolver() {
//super.setCacheManager(SpringContextHolder.getApplicationContext().getBean(CacheManager.class));
}
@PostConstruct
public voidinit(){
super.setCacheManager(SpringContextHolder.getApplicationContext().getBean(CacheManager.class));
}
@Override
protectedCollection getCacheNames(CacheOperationInvocationContext context) {
if(context.getOperation().getCacheNames().contains("SECOMMONDYN")){
Set cacheName =newHashSet();
context.getTarget().getClass().toString();
String simpleName = context.getTarget().getClass().getSimpleName();
simpleName = simpleName.substring(0, simpleName.length() -11);
cacheName.add(simpleName);
returncacheName;
}else{
returncontext.getOperation().getCacheNames();
}
}
}

框架调用:

标签:框架,spring,cache,如易云,simpleName,context,揭秘
From: https://blog.51cto.com/u_16066979/6414225

相关文章

  • ehcache 分布式支持
    <dependency><groupId>net.sf.ehcache</groupId><artifactId>ehcache</artifactId><version>2.10.1</version></dependency><dependency&......
  • SpringMVC3.2.x + Hibernate4.2.x + ecache + Spring Security 3.0.5
    这只是部分代码,一些代码可以参考:[url]http://panyongzheng.iteye.com/blog/1871418[/url]SpringSecurity3.1最新配置实例[url它自带的附件也上传。SpringSecurity3十五日研究[url]http://www.blogjava.net/SpartaYew/archive/2013/09/23/350630.html[/......
  • Hibernate和 OsCache的使用
    下载地址:[url]http://java.net/downloads/oscache/[/url]oscache这个jar里面的jms架包已经无法下载了。那么我就在网上自己下载了一个jms.jar安装到本地的仓库中去,就ok了。进入安装maven的目录bin中,执行如下命令:[i][color=blue]mvninstall:install-file......
  • oscache缓存技术
    oscache缓存技术:[url]http://j2eemylove.iteye.com/blog/939828[/url][b]1、OSCache是什么?[/b]OSCache标记库由OpenSymphony设计,它是一种开创性的缓存方案,它提供了在现有JSP页面之内实现内存缓存的功能。OSCache是个一个被广泛采用的高性能的J2EE缓存框架,OSCache还能应用于......
  • 盖瑞特发动机增压器大揭秘!隐藏在汽车引擎盖下的飞机发动机技术
    ......
  • centos7卡在sda assuming drive cache write through不能进入操作系统的一个解决方案
    1、https://blog.csdn.net/shishui07/article/details/113934961?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-5-113934961-blog-101298947.235^v36^pc_relevant_default_base3&spm=1001.2101.3001.4242.4&utm_rel......
  • 预约直播|揭秘鸿蒙全新流量阵地,元服务带来的体验变革
    【导读】在PC互联网到移动互联网的演进过程,随着人们对交互和信息获取的智能化要求越来越高,移动终端上的应用生态发展到今天也面临着变革。传统厚重的App,功能齐全,但开发成本高、周期长,且存在搜索、安装、卸载等一系列需要用户主动关注的显性操作,这些显性操作给用户带来了实质性的......
  • linux服务器cache占用内存过高导致内存不足
    问题描述linux服务器内存不足触发监控报警。K8S在创建pod之后启动失败,日志报错如下: 问题检查登录服务器发现服务器8G内存正在被使用的和空闲内存大概4G,还有大概4G被cache占用   这个cache占用了大量内存,那么这个cache时干什么用的?Linux中的缓存称为PageCache。它......
  • 稳如磐石,助力物联网无限畅通——揭秘这款DTU产品为什么如此稳定
    随着物联网的迅猛发展,工业级DTU设备成为了许多行业实现远程监控和数据传输的重要工具。不过面对如此之多的设备很多用户也会出现疑惑,到底应该如何选择一款好的DTU产品设备呢?在选择设备的时候我们需要着重注意哪些点?为什么要注意这几点?下面我们就用OM302系列工业级DTU设备的极稳特......
  • couldn't clear tomcat cache java.lang.NoSuchFieldException: resourceEntries
    2015-09-2500:17:11,435WARN[dqapp24http-nio-8002-exec-22]com.opensymphony.xwork2.util.LocalizedTextUtilcouldn'tcleartomcatcachejava.lang.NoSuchFieldException:resourceEntriesatjava.lang.Class.getDeclaredField(Class.java:2062)~[na:1.8......