真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

springboot之本地緩存(guava與caffeine)

1. 場(chǎng)景描述

因項(xiàng)目要使用本地緩存,具體為啥不用redis等,就不討論,記錄下過程,希望能幫到需要的朋友。

安居網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站設(shè)計(jì)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)公司成立與2013年到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)公司

2.解決方案

2.1 使用guava作為本地緩存

初步的想法是使用guava,因?yàn)楸旧眄?xiàng)目中就有g(shù)uava的denpency。

2.1.1 pom文件

需要3個(gè)dependency,如下:

  
  
            org.springframework.boot
            spring-boot-starter-cache
  
  
    
            org.springframework
            spring-context-support
            4.3.18.RELEASE
  
   
   
                com.google.guava
                guava
                24.0-jre
     
2.1.2 java類

(1)GuavaCacheManager

新建bean,返回及配置guava的GuavaCacheManager。

import com.google.common.cache.CacheBuilder;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.guava.GuavaCacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.concurrent.TimeUnit;
/**
* 
* @auther: 軟件老王
*/
@Configuration
@EnableCaching
public class GuavaCacheConfig {

    @Bean
    public CacheManager cacheManager() {
        GuavaCacheManager cacheManager = new GuavaCacheManager();
        cacheManager.setCacheBuilder(
                CacheBuilder.newBuilder().
                        expireAfterWrite(6, TimeUnit.HOURS).
                        maximumSize(1000)); //軟件老王,6小時(shí)過期,最大1000條
        return cacheManager;
    }
}

(2)spring注解標(biāo)簽使用緩存

/**
* 
* @auther: 軟件老王
*/
  @Cacheable(value = "ruanjianlaowang")
    public VO getUserInfo(String token) {
        VO vo = userauthClient.verifyToken(token);
        return vo;
    }

guava本地緩存完成。

2.2 spring框架提供的本地緩存方案

spring中已經(jīng)提供了抽象類,默認(rèn)只需要配置加載jar包,配置type就可以了,但是從spring5開始,將guava的剔除掉了,替換成了caffeine,spring做了測(cè)試,作為本地緩存caffeine比guava要高出好多,我們也改成了caffeine作為本地緩存。

springboot與guava、caffeine等本地緩存,springboot1的時(shí)候還有g(shù)uava,springboot2里面就把guava的緩存接口去掉了,所以前面guava本地緩存才需要定義Configuration,在這里面的話,就只需要在配置文件里面定義類型就會(huì)自動(dòng)注入了。

springboot之本地緩存(guava與caffeine)

2.3 caffeine本地緩存
2.3.1 pom文件
        
       
            com.github.ben-manes.caffeine
            caffeine
            2.8.0
        
2.3.2 配置文件
spring:
   cache:
      type: caffeine
      cache-names: bc.gateway.ut
      caffeine:
#        spec: maximumSize=5000,expireAfterWrite=20s
         spec: maximumSize=5000,expireAfterAccess=3600s

具體參數(shù)含義

/**
* @auther: 軟件老王
*/
? initialCapacity=[integer]: 初始的緩存空間大小
? maximumSize=[long]: 緩存的最大條數(shù)
? maximumWeight=[long]: 緩存的最大權(quán)重
? expireAfterAccess=[duration]: 最后一次寫入或訪問后經(jīng)過固定時(shí)間過期
? expireAfterWrite=[duration]: 最后一次寫入后經(jīng)過固定時(shí)間過期
? refreshAfterWrite=[duration]: 創(chuàng)建緩存或者最近一次更新緩存后經(jīng)過固定的時(shí)間間隔,刷新緩存
2.3.3 使用方式還是spring的標(biāo)簽不用動(dòng):
/**
* 
* @auther: 軟件老王
*/
  @Cacheable(value = "ruanjianlaowang")
    public VO getUserInfo(String token) {
        VO vo = userauthClient.verifyToken(token);
        return vo;
    }
2.4 關(guān)于spring緩存標(biāo)簽的說明

四個(gè)標(biāo)簽:

(1)@Cacheable,首先在緩存中查詢,沒有的話,進(jìn)方法執(zhí)行,執(zhí)行完成后返回值放緩存;

(2)@CachePut,不進(jìn)行查詢判斷,直接新增或者更新緩存內(nèi)容,類似add或update;

(3)@CacheEvict,直接清除,類似delete。

(4)@Caching,1,2,3個(gè)組合

value 緩存的名稱,在 spring 配置文件中定義,必須指定至少一個(gè) 例如: @Cacheable(value=”laowang_cache1”) @Cacheable(value={””laowang_cache1,”laowang_cache2”}
key 緩存的 key,可以為空,如果指定要按照 SpEL 表達(dá)式編寫,如果不指定,則缺省按照方法的所有參數(shù)進(jìn)行組合 @Cacheable(value=”laowang_cache1”,key=”#userName”)
condition 緩存的條件,可以為空,使用 SpEL 編寫,返回 true 或者 false,只有為 true 才進(jìn)行緩存 @Cacheable(value=”laowang_cache1”, condition=”#userName.length()>11”)

I’m 「軟件老王」,如果覺得還可以的話×××更新秒知!歡迎討論×××


網(wǎng)頁標(biāo)題:springboot之本地緩存(guava與caffeine)
鏈接地址:http://weahome.cn/article/pejsjd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部