您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(guān)SpringBoot+SpringCache實(shí)現(xiàn)兩級緩存的示例分析的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。
springboot一種全新的編程規(guī)范,其設(shè)計(jì)目的是用來簡化新Spring應(yīng)用的初始搭建以及開發(fā)過程,SpringBoot也是一個(gè)服務(wù)于框架的框架,服務(wù)范圍是簡化配置文件。
Spring cache:主要包含spring cache定義的接口方法說明和注解中的屬性說明
springboot+spring cache:rediscache實(shí)現(xiàn)中的缺陷
caffeine簡介
spring boot+spring cache實(shí)現(xiàn)兩級緩存
使用緩存時(shí)的流程圖
spring cache是spring-context包中提供的基于注解方式使用的緩存組件,定義了一些標(biāo)準(zhǔn)接口,通過實(shí)現(xiàn)這些接口,就可以通過在方法上增加注解來實(shí)現(xiàn)緩存。這樣就能夠避免緩存代碼與業(yè)務(wù)處理耦合在一起的問題。spring cache的實(shí)現(xiàn)是使用spring aop中對方法切面(MethodInterceptor)封裝的擴(kuò)展,當(dāng)然spring aop也是基于Aspect來實(shí)現(xiàn)的。
spring cache核心的接口就兩個(gè):Cache和CacheManager
1.2.1 Cache接口
提供緩存的具體操作,比如緩存的放入,讀取,清理,spring框架中默認(rèn)提供的實(shí)現(xiàn)有
1.2.2 CacheManager接口
主要提供Cache實(shí)現(xiàn)bean的創(chuàng)建,每個(gè)應(yīng)用里可以通過cacheName來對Cache進(jìn)行隔離,每個(gè)CaheName對應(yīng)一個(gè)Cache實(shí)現(xiàn),spring框架中默認(rèn)提供的實(shí)現(xiàn)與Cache的實(shí)現(xiàn)都是成對出現(xiàn)的
1.2.3 常用的注解說明
@Cacheable:主要應(yīng)用到查詢數(shù)據(jù)的方法上
@CacheEvict:清除緩存,主要應(yīng)用到刪除數(shù)據(jù)的方法上
@CachePut:放入緩存,主要用到對數(shù)據(jù)有更新的方法上
@Caching:用于在一個(gè)方法上配置多種注解
@EnableCaching:啟用spring cache緩存,作為總的開關(guān),在spring boot的啟動(dòng)類或配置類上需要加入次注解才會(huì)生效
package com.xfgg.demo.config; import lombok.AllArgsConstructor; import com.github.benmanes.caffeine.cache.Caffeine; import org.springframework.cache.CacheManager; import org.springframework.cache.caffeine.CaffeineCacheManager; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.util.concurrent.TimeUnit; @Configuration @AllArgsConstructor //把定義的緩存加入到Caffeine中 public class CacheConfig { @Bean public CacheManager cacheManager(){ CaffeineCacheManager cacheManager = new CaffeineCacheManager(); cacheManager.setCaffeine(Caffeine.newBuilder() //使用refreshAfterWrite必須要設(shè)置cacheLoader //在5分鐘內(nèi)沒有創(chuàng)建/覆蓋時(shí),會(huì)移除該key,下次取的時(shí)候從loading中取【重點(diǎn):失效、移除Key、失效后需要獲取新值】 .expireAfterWrite(5, TimeUnit.MINUTES) //初始容量 .initialCapacity(10) //用來控制cache的最大緩存數(shù)量 .maximumSize(150) ); return cacheManager; } }
package com.xfgg.demo.config; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.connection.RedisPassword; import org.springframework.data.redis.connection.RedisStandaloneConfiguration; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.StringRedisSerializer; //生成的redis連接 public class RedisConfig<GenericObjectPoolConfig> { @Value("${spring.redis1.host}") private String host; @Value("${spring.redis1.port}") private Integer port; @Value("${spring.redis1.password}") private String password; @Value("${spring.redis1.database}") private Integer database; @Value("${spring.redis1.lettuce.pool.max-active}") private Integer maxActive; @Value("${spring.redis1.lettuce.pool.max-idle}") private Integer maxIdle; @Value("${spring.redis1.lettuce.pool.max-wait}") private Long maxWait; @Value("${spring.redis1.lettuce.pool.min-idle}") private Integer minIdle; @Bean public RedisStandaloneConfiguration redis1RedisConfig() { RedisStandaloneConfiguration config = new RedisStandaloneConfiguration(); config.setHostName(host); config.setPassword(RedisPassword.of(password)); config.setPort(port); config.setDatabase(database); return config; } //配置序列化器 @Bean public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory factory){ RedisTemplate<String,Object>template=new RedisTemplate<>(); //關(guān)聯(lián) template.setConnectionFactory(factory); //設(shè)置key的序列化器 template.setKeySerializer(new StringRedisSerializer()); //設(shè)置value的序列化器 template.setValueSerializer(new StringRedisSerializer()); return template; } }
一個(gè)使用cacheable注解,一個(gè)使用redistemplate進(jìn)行緩存
感謝各位的閱讀!關(guān)于“SpringBoot+SpringCache實(shí)現(xiàn)兩級緩存的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。