• Springboot使用ehcache缓存


    本文部分步骤继承于springboot使用cache缓存,如果有不清楚的,请移驾springboot使用cache缓存

    ehcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持RESTSOAP api等特点。

     1、依赖导入

    整合ehcache必须要导入它的依赖。

    <dependency>
        <groupId>net.sf.ehcache</groupId>
        <artifactId>ehcache</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-cache</artifactId>
    </dependency>

    2、yml文件

    需要说明的是config:classpath:/ehcache.xml可以不用写,因为默认就是这个路径。但ehcache.xml必须有。

    spring:
      cache:
        type: ehcache
        ehcache:
          config: classpath:/config/ehcache.xml

    3、ehcache.xml

     在resources目录下新建config文件夹,在文件夹中建立ehcache.xml文件。

    <ehcache>
    
        <!--
            磁盘存储:将缓存中暂时不使用的对象,转移到硬盘,类似于Windows系统的虚拟内存
            path:指定在硬盘上存储对象的路径
            path可以配置的目录有:
                user.home(用户的家目录)
                user.dir(用户当前的工作目录)
                java.io.tmpdir(默认的临时目录)
                ehcache.disk.store.dir(ehcache的配置目录)
                绝对路径(如:d:\ehcache)
            查看路径方法:String tmpDir = System.getProperty("java.io.tmpdir");
         -->
        <diskStore path="java.io.tmpdir" />
    
        <!--
            defaultCache:默认的缓存配置信息,如果不加特殊说明,则所有对象按照此配置项处理
            maxElementsInMemory:设置了缓存的上限,最多存储多少个记录对象
            eternal:代表对象是否永不过期 (指定true则下面两项配置需为0无限期)
            timeToIdleSeconds:最大的发呆时间 /秒
            timeToLiveSeconds:最大的存活时间 /秒
            overflowToDisk:是否允许对象被写入到磁盘
            说明:下列配置自缓存建立起600秒(10分钟)有效 。
            在有效的600秒(10分钟)内,如果连续120秒(2分钟)未访问缓存,则缓存失效。
            就算有访问,也只会存活600秒。
         -->
        <defaultCache maxElementsInMemory="10000" eternal="false"
                      timeToIdleSeconds="600" timeToLiveSeconds="600" overflowToDisk="true" />
    
        <cache name="myCache" maxElementsInMemory="10000" eternal="false"
                      timeToIdleSeconds="120" timeToLiveSeconds="600" overflowToDisk="true" />
    
    </ehcache>

     4、使用缓存

     @CacheConfig(cacheNames={“myCache”})设置ehcache的名称,这个名称必须在ehcache.xml已配置。

    import com.example.ehcache.dao.PersonRepository;
    import com.example.ehcache.entity.Person;
    import com.example.ehcache.service.DemoService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.cache.annotation.CacheConfig;
    import org.springframework.cache.annotation.CacheEvict;
    import org.springframework.cache.annotation.CachePut;
    import org.springframework.cache.annotation.Cacheable;
    import org.springframework.stereotype.Service;
    
    /**
     * @author 李振
     * @date 2018/12/27
     *
     */
    @Service
    @CacheConfig(cacheNames = {"myCache"})
    public class DemoServiceImpl implements DemoService {
        @Autowired
        private PersonRepository personRepository;
        /**
         * 注意:如果没有指定key,则方法参数作为key保存到缓存中
         */
        /**
         * @param person
         * @return
         * @CachePut缓存新增的或更新的数据到缓存,其中缓存的名称为people,数据的key是person的id
         */
        @CachePut(key = "#person.id")
        @Override
        public Person save(Person person) {
            Person p = personRepository.save(person);
            System.out.println("为id,key为:" + p.getId() + "数据做了缓存");
            return p;
        }
    
        /**
         * @param id
         * @CacheEvict从缓存people中删除key为id的数据
         */
        @CacheEvict
        @Override
        public void remove(Integer id) {
            System.out.println("删除了id,key为" + id + "的数据缓存");
            personRepository.delete(id);
        }
    
        /**
         * @param person
         * @return
         * @Cacheable缓存key为person的id数据到缓存people中
         */
        @Cacheable(key = "#person.id")
        @Override
        public Person findOne(Person person) {
            Person p = personRepository.findOne(person.getId());
            System.out.println("为id,key为:" + p.getId() + "数据做了缓存");
            return p;
        }
    }

    以上

    原文出处:

    吟风者,springboot使用ehcache缓存, https://www.jianshu.com/p/9e4eb5e5bc1b

     

  • 相关阅读:
    Ensure that you have installed a JDK (not just a JRE) and configured your JAVA_HOME system variable
    调试bug 技巧
    调试bug 技巧
    调试bug 技巧
    调试技巧之 找准调试点
    调试技巧之 找准调试点
    调试技巧之 找准调试点
    adnroid 打包问题 :compileReleaseJavaWithJavac
    线程等待
    LinkedList源码解析(jdk1.8)
  • 原文地址:https://www.cnblogs.com/ryelqy/p/11382334.html
Copyright © 2020-2023  润新知