• 分享公司缓存的用法


    主题

      公司在缓存用的还是比较简单的,可能不同于其他公司需要redis,memcache等等缓存.公司使用的是ehcache(怎么感觉他们很高大上,我们很low...大概是因为ehcache和spring结合比较好,通过注解使用太简单了吧.). 

      这篇文章主要分享ehcache公司是怎么使用的.

    配置

    Spring引入ehcache

       配置倒也没啥好说的.网上百度一大堆,一般其他框架和Spring整合的时候都是配置一个Spring的XXXXFactoryBean.ehcache也不例外.

     1     <bean id="ehCacheManager"
     2         class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
     3         <property name="configLocation" value="classpath:ehcache.xml" />
     4         <property name="shared" value="true" />
     5     </bean>
     6     
     7     <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
     8         <property name="cacheManager" ref="ehCacheManager" />
     9     </bean>
    10     
    11     <cache:annotation-driven cache-manager="cacheManager" />

    EhCacheManagerFactoryBean就是为了在程序启动的时候生成CacheManager,这种FactoryBean据我观察一般都是实现了afterPropertiesSet方法来参与Spring的声明周期.

    我以前自己学习的时候并没有用过什么缓存,对ehcache也并不怎么了解.但是我觉得EhCacheCacheManager应该就是类似乎Hibernate的session那样的,给我们这样的使用者提供一些常用的便利方法的这样一个面板吧.

    ehcache配置

      每个框架肯定也有自己的一些配置,ehcache也同样,公司用缓存主要是缓存代码表和参数表里的数据,比如税务机关的代码呀,系统的参数呀类似的.

     1 <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd" updateCheck="false">
     2 
     3     <diskStore path="${java.io.tmpdir}/xxx/cache" />
     4 
     5     
     6     
     7     <cache name="message" maxElementsInMemory="1" timeToLiveSeconds="86400" eternal="false" overflowToDisk="true" />
     8     
     9 
    10  
    11 </ehcache>

    比如这一小段就是配置了一个系统提示信息的缓存.至于配置后面那些熟悉是什么意思....其实看熟悉名字就知道了...到底需要怎么配置可能还是要看具体需求...

    具体使用

      前面说过,公司主要缓存是用在参数表,代码表上面. 而参数表代码表的取值,我前面有一篇文章介绍过公司BaseCode的用法(http://www.cnblogs.com/abcwt112/p/6085335.html).缓存主要是用在那里.

      比如前面那篇文章提到过的,通过Provider去取某张代码表的List的时候就是有缓存的.

    1     @Override
    2     @Cacheable(value = "basecode-common", key = "#defDto.codeType + "_CODE_LIST"")
    3     public List<BaseCodeDTO> getCodeList(BaseCodeDefDTO defDto) {
    4         if (defDto.getTableName() == null) {
    5             return null;// NOSONAR
    6         }
    7         return codeService.getCodeListParamMap(defDto, null);
    8     }

    这个方法的方法体需不需要执行,是通过@Cacheable注解来控制的,注解里面有很多属性可以定制,但是公司基本都没用,只用到了value和key.value主要是对应前面缓存的一些配置,key主要是用于区分不同入参的情况下,哪些是已经有缓存了,可以直接取值,哪些是需要重新执行方法去取值的.

    当然,公司也会提供一个方法去刷新缓存(比如URL)

    1     @RequestMapping(value = "/refreshBaseCode")
    2     public String refreshBaseCode() {
    3         appManagementFacade.refreshBaseCode();
    4         appManagementFacade.refreshQxswjg();
    5         appManagementFacade.refreshSbjbjg();
    6         appManagementFacade.refreshMessage();
    7         return "basecodeRefresh";
    8     }
    1     @CacheEvict(value="message",allEntries=true)
    2     public void refreshMessage(){
    3         LOGGER.info("Refresh message");
    4     }

    刷新缓存也是利用Spring提供的注解.

    小结

      公司使用在缓存方面使用的还是比较简单的,基本就是缓存了代码表和参数表,提示信息等..使用方法也是直接使用Spring的注解.所以缓存对于我们开发来说基本算是透明的吧.

  • 相关阅读:
    C++11 序列化库 cereal
    Eigen 3.3.7 数组类(Array)和元素操作
    Java【 final、权限、内部类、引用类型】学习笔记
    Java多态学习笔记
    学习GUI编程第二天笔记
    GUI编程小测试
    第一篇学习笔记(Typora使用手册)
    Spring Boot2 系列教程(九)Spring Boot 整合 Thymeleaf
    Spring Boot2 系列教程(七)理解自动化配置的原理
    Spring Boot2 系列教程(六)自定义 Spring Boot 中的 starter
  • 原文地址:https://www.cnblogs.com/abcwt112/p/6108756.html
Copyright © 2020-2023  润新知