美文网首页Spring Boot
如易云揭秘1-框架(cache)

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

作者: starteasy | 来源:发表于2016-11-28 23:04 被阅读245次

       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();

}

}

}


框架调用:

@CacheConfig(cacheNames ="SECOMMONDYN", cacheResolver ="runtimeImplCacheResolver")


相关文章

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

    Hibernate老鸟的话,对于Hibernate cache的精妙实现应该都是非常了解,即便不了解其实现原...

  • 如易云揭秘1-框架

    如易云是什么 如易云的框架是业务系统开发和技术中间件之前的桥梁,是对业务领域深入理解后的精巧封装,可以大大提升开...

  • 如易云解密2-自动生成代码

    如易云框架 先了解,基于如易云在线服务可快速生成 类似 https://git.oschina.net/star...

  • 如易云是什么

    如易云是创易旗下的云产品。如易云,技术加速,让创业变得简单!如易云想做最懂你的云服务厂商(如何最懂你?吸纳任何感...

  • 如易云平台使用

    如易云平台主要 服务于 开发者,开发人员使用如易云基本功能大概是这样的: 在线使用如易云,请参看文章:如易云解...

  • Flutter web 跨域问题

    1- Go to flutter\bin\cache and remove a file named: flutt...

  • guava cache源码分析之1个小demo的引入

    1:cache的总体框架 如下图,cache 接口是所有guava cache的最顶层接口,这里定义了对缓存操作的...

  • 手写mybatis框架-增加缓存&事务功能

    增加代码详解 缓存 com.simple.ibatis.cache 缓存接口-Cache 自定义框架缓存接口,提供...

  • 手写cache框架

    是否需要兼容,是否可扩展--原生js 遵循开闭原则 扩展性 应用简单 面向接口的设计

  • Spring Cache缓存框架

    一、序言 Spring Cache是Spring体系下标准化缓存框架。Spring Cache有如下优势: 缓存品...

网友评论

    本文标题:如易云揭秘1-框架(cache)

    本文链接:https://www.haomeiwen.com/subject/wmfapttx.html