分享公司缓存的用法

主题

  公司在缓存用的还是比较简单的,可能不同于其他公司需要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的注解.所以缓存对于我们开发来说基本算是透明的吧.

posted @ 2016-11-28 11:24  abcwt112  阅读(476)  评论(0编辑  收藏  举报