您现在的位置是:网站首页>>信息浏览 文章详情

SpringBoot的数据缓存——基于Ehcache2.x缓存技术的配置
2019-05-02 12:53 许多年以后 1732

我们知道Spring支持很多种缓存,针对不同的缓存技术,我们都需要实现不同的CacheManager。但是SpringBoot帮我们自动配置了多个CacheManager的实现,我们只要引用不同的依赖包,SpringBoot会帮我们切换到不同的CacheManager,本篇文章说的是基于Ehcache2.x的数据缓存配置。

1.添加相关依赖:

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-cache</artifactId>
  4. </dependency>
  5. <dependency>
  6. <groupId>net.sf.ehcache</groupId>
  7. <artifactId>ehcache</artifactId>
  8. </dependency>

2.添加缓存配置文件
如果Ehcache的依存在,并且在classpath下有个名为ehcache.xml的Ehcache配置文件,那么EhCacheCacheManager将会自动作为缓存的实现。因此,在resources目录下创建ehcache.xml文件作为Ehcache缓存的配置文件。

  1. <ehcache>
  2. <diskStorepath="java.io.tmpdir/cache"></diskStorepath>
  3. <defaultCache4ImaxElementsInMemory"10000"
  4. eternal="false"
  5. timeToidleSeconds="120"
  6. timeToLiveSeconds="120"
  7. overflowToDisk="false"
  8. diskPersistent="false"
  9. diskExpiryThreadintervalSeconds="120"></defaultCache4ImaxElementsInMemory>
  10. <cachename="bookcache"
  11. maxElementsinMemory="10000"
  12. eternal="true"
  13. timeToidleSeconds="120"
  14. timeToLiveSeconds="120"
  15. overflowToDisk="true"
  16. diskPersistent="true"
  17. diskExpiryThreadintervalSeconds="600"></cachename>
  18. </ehcache>

这是一个常规的Ehcache配置文件,提供了两个缓存策略,一个是默认的,另一个名为book_cache。其中,name表示缓存名称:maxElementslnMemory表示缓存最大个数;eternal表示缓存对象是否永久有效,一旦设置了永久有效,timeout将不起用;timeToldleSeconds表示缓存对象在失效前的允许闲置时间(单位:秒),当etemal=false象不是永久有效时,该属性才生效;timeToLiveSeconds表示缓存对象在失效前许存活的时间(单位:秒),当etemal=false对象不是永久有效时,该属性才生效;overflowToDisk示当内存中的对象数量达到maxElementslnMemory时,Ehcache是否将对象写到磁盘中;diskExpiryThreadlntervalSeconds表示磁盘失效线程运行时间间隅。还有其他更为详细的Ehcache配置,这里就不一一介绍了。当然,还自定义Ehcache配置文件的名称和位置,可以在application.properties中添加如下配置:

  1. spring.cache.ehcache.config=classpath:config/another-config.xml

3,开启缓存
缓存配置好了后,我们只要在启动类前设置@EnableCaching注解来开启缓存

  1. @Spring BootApplication
  2. @EnableCaching
  3. public class RedisclustercacheApplication {
  4. public static void main (String [] args ) {
  5. SpringApplication.run(RedisclustercacheApplication.class , args);
  6. }
  7. }

4.使用缓存
spring提供了4个注解来声明缓存的使用

注解 说明
@Cacheable 在方法使用先,先看缓存是否有数据,如果有则返回,如果没有则调用方法,结果返回也存入缓存中
@CachePut 不管缓存是否有数据,都会更新,将返回结果都会存入缓存中
@ChcheEvict 将一条或多条数据从缓存中删除
@Caching 组合多条缓存注解在一个方法上

代码:

  1. //先查询缓存名personname是否有数据,如果有则返回,如果没有则调用方法,将结果返回的也存入缓存中
  2. @Cacheable(value="personname",key="#person.name")
  3. public Person save(String name){
  4. Person p=new Person();
  5. Person.setName(name);
  6. return p;
  7. }
  8. //缓存名为personname,新增或者更新把Person的name存入缓存中,也就是不管缓存是否有数据,都会更新
  9. @CachePut (value="personname",key="#person.name")
  10. public Person save(String name){
  11. Person p=new Person();
  12. Person.setName(name);
  13. return p;
  14. }
  15. //删除缓存名为personname的缓存
  16. @ChcheEvict(value="personname")
  17. public void del(String name){
  18. }

如果没有指定key的情况下,会把参数当作key存入缓存中

赞 (96)
文章出处:书生个人博客          转载注明下哦!o(≧v≦)o~~

标签: Ehcache2.x缓存配置springboot系列原创

相似文章:


随便说两句
请先登录
遵守国家法律法规,请勿回复无意义内容,请不要回复嵌套过多的楼层!