springboot学习(六)整合缓存框架

Spring Boot + Spring Cache + Redis

在Spring Boot中,可以非常方便的使用Redis来作为Cache的实现,进而实现数据的缓存。

  • 添加依赖

        <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-data-redis</artifactId>
       </dependency>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-cache</artifactId>
       </dependency>
  • 配置Redis和cache

spring.redis.port=6379
spring.redis.host=127.0.0.1
spring.cache.cache-names=c1

在启动类上开启缓存,使用注解 @EnableCaching

完成了这些配置之后,Spring Boot就会自动帮我们在后台配置一个RedisCacheManager,相关的配置是在org.springframework.boot.autoconfigure.cache.RedisCacheConfiguration类中完成的。

系统会自动提供一个RedisCacheManager的Bean,这个RedisCacheManager间接实现了Spring中的Cache接口,有了这个Bean,我们就可以直接使用Spring中的缓存注解和接口了,而缓存数据则会被自动存储到Redis上。在单机的Redis中,这个Bean系统会自动提供,如果是Redis集群,这个Bean需要开发者来提供

  • 缓存相关注解

    • @CacheConfig,在类上使用,用来描述该类中所有方法使用的缓存名称,当然也可以不使用该注解,直接在具体的缓存注解上配置名称

    • @Cacheable,这个注解一般加在查询方法上,表示将一个方法的返回值缓存起来,默认情况下,缓存的key就是方法的参数,缓存的value就是方法的返回值;当有多个参数时,默认就使用多个参数来做key,如果只需要其中某一个参数做key,则可以在@Cacheable注解中,通过key属性来指定key

    • @CachePut,这个注解一般加在更新方法上,当数据库中的数据更新后,缓存中的数据也要跟着更新,使用该注解,可以将方法的返回值自动更新到已经存在的key上

    • @CacheEvict,这个注解一般加在删除方法上,当数据库中的数据删除后,相关的缓存数据也要自动清除,该注解在使用的时候也可以配置按照某种条件删除(condition属性)或者或者配置清除所有缓存(allEntries属性)

Spring Boot + Spring Cache + Ehcache

Spring Cache 可以整合 Redis,当然也可以整合 Ehcache,两种缓存方案的整合还是比较相似,主要是配置的差异,具体的用法是一模一样的,就类似于 JDBC 和 数据库驱动的关系一样。前面配置完成后,后面具体使用的 API 都是一样的。

  • 添加依赖

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
   <groupId>org.ehcache</groupId>
   <artifactId>ehcache</artifactId>
   <version>3.8.1</version>
</dependency>
  • 添加Ehcache配置 ehcache.xml

<?xml version="1.0" encoding="utf-8"?>

<ehcache>
 <diskStore path="java.io.tmpdir/shiro-spring-sample"/>  
 <defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="false" diskPersistent="false" diskExpiryThreadIntervalSeconds="120"/>  
 <cache name="user" maxElementsInMemory="10000" eternal="true" overflowToDisk="true" diskPersistent="true" diskExpiryThreadIntervalSeconds="600"/>
</ehcache>

配置含义:

  1. name:缓存名称。

  2. maxElementsInMemory:缓存最大个数。

  3. eternal:对象是否永久有效,一但设置了,timeout将不起作用。

  4. timeToIdleSeconds:设置对象在失效前的允许闲置时间(单位:秒)。仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。

  5. timeToLiveSeconds:设置对象在失效前允许存活时间(单位:秒)。最大时间介于创建时间和失效时间之间。仅当eternal=false对象不是永久有效时使用,默认是0.,也就是对象存活时间无穷大。

  6. overflowToDisk:当内存中对象数量达到maxElementsInMemory时,Ehcache将会对象写到磁盘中。

  7. diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。

  8. maxElementsOnDisk:硬盘最大缓存个数。

  9. diskPersistent:是否缓存虚拟机重启期数据。

  10. diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。

  11. memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)。

  12. clearOnFlush:内存数量最大时是否清除。

  13. diskStore 则表示临时缓存的硬盘目录。

  • 开启缓存,使用 @EnableCaching

  • 缓存注解 同 spring boot + spring cache + redis

 

posted @ 2020-12-20 18:29  hjy1995  阅读(808)  评论(0编辑  收藏  举报