Spring整合ehcache

本文介绍如何将EHCache集成到Spring项目中,并详细展示了配置过程。包括设置cacheManager、定义缓存规则以及如何在代码中使用EHCache进行数据读写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

cache在项目中总是少不了的,如果不想把cache模块独立出来,比如(memcached、redis)等,希望有一个集成在项目中的小型、简单的cache,ehcache也是不错的,它是用java开发的。


spring配置的bean如下,首先需要个cacheManger,它关联了cache配置的一些信息,下面的bean表明cache配置在ehcache.xml中

	<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
      <property name="configLocation" value="classpath:ehcache.xml" />
      <property name="shared" value="true" />
    </bean>	

ehcache.xml的配置如下,有个默认的cache,还有个命名的cache,有生存时间,最大存储个数等配置

<ehcache>
  <diskStore path="java.io.tmpdir"/>

  <defaultCache
    maxElementsInMemory="5000"
    eternal="true"
    timeToLiveSeconds="300"
    overflowToDisk="false" />
                    
  <cache
    name="vDataCache"
    maxElementsInMemory="10000"
    eternal="false"
    timeToLiveSeconds="3600"
    overflowToDisk="false"
    diskPersistent="false" />
    
</ehcache>

然后在spring的bean配置中有如下内容,这样就把vDataCache关联上配置文件中vDataCache的参数了。并且注入到vDataCacheUtil的cache变量中。注意此处vDataCacheUtil的生成时通过工厂方法生成的。

    <bean id="vDataCache" class="org.springframework.cache.ehcache.EhCacheFactoryBean">
        <property name="cacheManager" ref="cacheManager" />
        <property name="cacheName" value="vDataCache" />
    </bean>
    
    <bean id="vDataCacheUtil" class="com.XXX.spaces.web.util.VDataCacheUtil" factory-method="getInstance">
        <property name="cache" ref="vDataCache"/>
    </bean>


vDataCache如下

public class VDataCacheUtil {
    private static VDataCacheUtil instance = null;
    private static final Logger LOG = LoggerFactory.getLogger(VDataCacheUtil.class);
    private Cache cache;
    
    private VDataCacheUtil(){}
    
    public static VDataCacheUtil getInstance() {
        if (instance == null) {
            synchronized (VDataCacheUtil.class) {
                if (instance == null)
                    instance = new VDataCacheUtil();
            }
        }
        return instance;
    }
    
    public Object get(String key) {
        if (cache == null) {
            return null;
        }
        try {
            Element e = cache.get(key);
            if (e != null) {
                return e.getObjectValue();
            }
        } catch (Exception e) {
            LOG.error(e.getMessage(), e);
        }
        return null;
    }

    public void put(String key, Object obj) {
        if (cache == null || key == null || obj == null) {
            return;
        }
        try {
            Element e = new Element(key, obj);
            cache.put(e);
        } catch (Exception e) {
            LOG.error(e.getMessage(), e);
        }
    }

    public Cache getCache() {
        return cache;
    }

    public void setCache(Cache cache) {
        this.cache = cache;
    }
}

使用代码

private VDataCacheUtil vDataCacheUtil = VDataCacheUtil.getInstance();

// cache
String k = "trends-sohu" + videoId;
Long[] playData = (Long[]) vDataCacheUtil.get(k);
if (playData == null) {
    playData = weMediaVideoPlayCountService
	.getVideoPlayCountAndPlayTimeAll(videoId);
    if (playData != null) {
	vDataCacheUtil.put(k, playData);
    } else {
	playData = new Long[] { 0L, 0L };
    }
}
// cache end



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值