ehcache在Spring Boot中的应用

10 篇文章 0 订阅
10 篇文章 0 订阅

ehcache的应用

缓存在我们的日常工作中,是必不可少的!原因是:大量的数据全部从数据库中查询,会给数据库造成压力,为了减少数据库压力,我们通常采用的办法是,提前将数据放在缓存中,需要时直接从缓存中获取即可!从而减少了数据库的访问,降低了数据库压力!

ehcache相关配置说明

缓存目录,默认为计算机系统的临时空间,也可自己设置!

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

相关熟悉的说明:

(1)maxElementsInMemory:缓存内容是存在内存中的,此项是设置内存中最多可以存储多少个元素(java对象)
(2)eternal:缓存数据是否永久有效
(3)timeToIdleSeconds:最大空闲时间,单位是秒,缓存数据不使用时间超过设置时间,即作废((2)设置为false的情况下使用)
(4)timeToLiveSeconds:生命周期,单位是秒,不管使不使用,达到设置时间,即作废((2)设置为false的情况下使用)
(5)overflowToDisk:溢出到磁盘,设置为true后,缓存数量超过(1)所设置的最大数量后,超出的部分缓存到上面所设置的临时空间
(6)maxElementsOnDisk:设置磁盘中最多可以存储多少个元素(java对象)
(7)diskPersistent:磁盘内容的持久化,意思是当服务器(例如tomcat)重启后,磁盘上缓存的内容还要不要,true是要,false是不要
(8)diskExpiryThreadIntervalSeconds:启动线程时间,单位是秒,每隔多长时间启动一个线程,清理掉无用数据
(9)memoryStoreEvictionPolicy:淘汰策略,就是判定数据是否有用的标准:(1)LRU:最近最少使用(2)FIFO:先进先出,主要使用这两种策略

准备一个用不过期的配置:

 <cache name="CONSTANT"
           maxElementsInMemory="1"
           eternal="true"
           clearOnFlush="false"
           overflowToDisk="true"
           diskSpoolBufferSizeMB="1024"
           maxElementsOnDisk="100000"
           diskPersistent="false"
           diskExpiryThreadIntervalSeconds="120"
           memoryStoreEvictionPolicy="LFU"
           transactionalMode="off">
    </cache>

ehcache在Spring中的配置

获取ehcache.xml中的cache的配置,交给CacheManager进行管理:

@Configuration
public class CacheConfig {

    @Bean
    public CacheManager cacheManager(EhCacheManagerFactoryBean bean) {
        return bean.getObject();
    }

    @Bean
    public EhCacheManagerFactoryBean ehCacheManagerFactoryBean() {
        EhCacheManagerFactoryBean cacheManagerFactoryBean = new EhCacheManagerFactoryBean();
        cacheManagerFactoryBean.setConfigLocation(new ClassPathResource("ehcache/ehcache.xml"));
        cacheManagerFactoryBean.setShared(true);
        // 设置完属性后,cacheManagerFactoryBean会执行afterProertiesSet()方法,
        // 所以不能在这里直接执行cacheManagerFactoryBean.getObject(),直接执行的话,
        // 因为在afterPropertiesSet()方法之前执行,所以:getObject()会得到null值
        return cacheManagerFactoryBean;
    }
}

通过CacheManager操作具体的Cache:

	@Autowired
    private CacheManager cacheManager;

    /**
     * 获取缓存信息
     * @param cacheName 缓存名
     * @param key       自定义key
     * @param <T>       返回值
     * @return
     */
    public <T> T getCache(String cacheName,String key) {
        Cache cache = cacheManager.getCache(cacheName);
        if (cache == null) {
            return null;
        }
        Element element = cache.get(key);
        if (element == null) {
            return null;
        }
        return (T)element.getObjectValue();
    }
    /**
     * 添加缓存信息
     * @param cacheName
     * @param key
     * @param value
     */
    public void putCache(String cacheName,String key, Object value) {
        Cache cache = cacheManager.getCache(cacheName);
        if (cache != null) {
            Element element = new Element(key, value);
            cache.put(element);
        }
    }
    /**
     * 清理缓存
     * @param cacheName
     * @param key
     */
    public void evictCache(String cacheName,String key) {
        Cache cache = cacheManager.getCache(cacheName);
        if (cache != null) {
            cache.remove(key);
        }
    }

ehcache实际演示

进行缓存数据操作:

	@Autowired
    private CacheManagerUtil cacheManagerUtil;

    @PostConstruct
    public void  init(){
        logger.info("AUTHIC表数据进行缓存开始.......");

        List<Authic> allNamePass = authicMapper.getAllNamePass();
        logger.info("本次缓存的数据量是:" + allNamePass.size() +"/条!");
        for (Authic authic: allNamePass) {
            logger.info("缓存的具体数据是:" + authic);
            cacheManagerUtil.putCache(cacheNameConcats.cacheName,authic.getName(),authic.getPassword());
        }
        logger.info("AUTHIC表数据进行缓存结束.......");
    }

查看控制台
在这里插入图片描述
通过控制台我们可以知道,当前的数据已经缓存了,通过缓存取数据,验证一下我们的猜想!

数据库中的数据:
在这里插入图片描述
通过请求获取key:小明的value:?
在这里插入图片描述
接口访问的返回值:
在这里插入图片描述

以上就是Ehcache的简单应用!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胤墨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值