導航:首頁 > 源碼編譯 > cacheable源碼解析

cacheable源碼解析

發布時間:2023-04-28 10:06:38

『壹』 為什麼@Cacheable只能作用於public方法源碼這樣設計有什麼道理嗎

一般註解的解析都是通過反射來完成的,在顫並反射的時候如果方法是private修飾的話,沖慎那麼就得暴力反射,設置取消許可權檢查,這樣可能會帶來很多問題,所以,散洞敬一般都是public修飾,這樣反射的時候好調用

如有疑問請追問,滿意請採納,謝謝

『貳』 CACHEABLE在計算機里是什麼意思

分類: 電腦衫拿/網路 >> 反病毒
解析:

CACHE在岩旁計算機里是高速緩存的意思,ABLE在英語里就是起作用的意思,所以合起來就是使高速緩存起作用的意思,這個單詞或棗搭在BIOS(CMOS)設置中經常可以看到

『叄』 Druid連接池源碼解析(8)DruidPooledStatement

本來以為pool包收尾了,掃了一下發現還有statement,這塊比較簡單,是對JDBC的Statement進行了一些封裝,實現了與連接池對應的功能,看下類圖:

DruidPooledStatement 中最重要的就是execute開頭的一系列方法了,是執行SQL的本體,都是對JDBC的Statement的增強,主要多做了以下:

DruidPooledPreparedStatement實現了JDBC的PreparedStatement,是執行預編譯的SQL用,跟Connection相同,引入了PreparedStatementHolder這樣一個Holder類,同樣定義了一些統計屬性,其中有個屬性pooling,是否池化,引出了PreparedStatementPool,裡面用LinkedHashMap實現了LRU,一個cache類用來緩存預編譯過的statement;
cache的key定義了一個類,PreparedStatementKey,重寫了hashcode和equals方法,很有意思地參考了String的hashcode,用了31這個質數作進制來計算hash,且不僅僅是sql語句相同,需要其他屬性都相同才算相同,貼一下源碼:

CallableStatement是用來執行函數或者存儲過程的,在當下的大環境笑銀下,用得真的很少就略過了吧。

druid在JDBC的statement基礎上,封裝了一些類來擴展自己的屬性和功能,一般在工程環境下,基本就用AOP或者裝飾器模式來實腔辯現(感覺這個Holder有點像裝飾器,又有點像單例的Holder)的,寫框架的時候,這種方式還碰圓宴是很值得借鑒的,很內聚、高效,也沒有額外的引用
cache的使用很巧妙,但是在刷文章的時候看到過一個問題,雖然在後續版本中修復了,但還是分享一下:
探究Druid連接池「違反協議」異常
這個問題拋的是SQL異常,問題卻出在緩存上,對與緩的狀態和刷新策略,有了新的認識

『肆』 Android:深入剖析圖片載入庫Glide緩存功能(源碼分析)

Glide 需要緩存的 圖片資源 分為兩類:

Glide 的緩存機制使得 Glide 具備非常好的圖片緩存效果,從而使得具備較高的圖片載入效率。

下面,我將根據 Glide 緩存流程中的每個步驟 進行源碼分析。

至此, Glide 的圖片緩存 Key 生成完畢。

至此,創建好了緩存對象 LruResourceCache

即:

源碼分析如下:

若上述兩個方法都沒獲取到緩存圖片時(即內存緩存里沒有該圖片的緩存),就開啟新線程載入圖片。

若無法從 內存緩存 里 獲得緩存的圖片, Glide 就會採用第2級緩存:磁碟緩存 去獲取緩存圖片

寫入 內存緩存分為:寫入 弱引用緩存 & LruCache 演算法的緩存

寫入 LruCache 演算法 內存緩存的原理:包含圖片資源 resource 的 EngineResource 對象的一個引用機制:

所以:

至此,實現了:

至此, Glide 的圖片緩存流程解析完畢。

Android圖片載入的那些事:為什麼你的Glide 緩存沒有起作用?

不定期分享關於 安卓開發 的干貨,追求 短、平、快 ,但 卻不缺深度

『伍』 springboot @Cacheable 基本使用

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

@Cacheable :
        對方法結果進行緩存(主要用於GET方法)
        cacheNames/value:指定緩存主鍵(Cache)的名字
        key:緩存數據使用key,支持spEl語法
        keyGenerator:key的生成器。與key屬性沖突,自定義 keyGenerator 必須實現
        org.springframework.cache.interceptor.KeyGenerator,default使用默認的參數值生成器     
        cacheManager:指定緩存管理器,或者cacheResolver指定獲取解析器cacheResolver:與    
        CacheManager沖突condition:指定條件滿足才緩存,與unless相反。可以使用spEL語法
        unless:否定緩存,當滿足條件時,結果不被緩存。可以獲取到結果(#result)進行判斷。支持spEL語法
        sync:是否非同步模式。在該模式下unless不被支持。default=false
@CachePut:先調用方法,在對結果進行緩存。(主要用於PUT方法),需要注意key的設置@CacheEvict:默認先調用方法,在刪除緩存(主要用於DELETE方法)allEntries: 刪除緩存組件中(cacheNames/value指定)所有的值beforeInvocation:在方法執行之前刪除值,default=false@Caching:組合註解。針對復雜情況@CacheConfig:載入類上,用於設置緩存的共有屬纖好兆性  

幾個屬性:

cacheNames/values:指定緩存組件的名字,將方法的返回結果放在哪個緩存中,是數組的方式,可以指定多個緩存

key:緩存數據使用毀租的key;襪稿可以用它來指定。默認是使用方法參數的值 

        可以用spEL表達式來表示;#id-如(getEmp[1]); 參數id的值:  #a0  #p0  #root.args[0]

keyGenerator:key的生成器;可以自己指定key的生成器的組件id

                      key/keyGenerator:二選一使用(自己配置類)

cacheManager:指定使用哪個緩存管理器;或者cacheResolver指定獲取解析器

condition:指定符合條件的情況下才緩存; 如:condition = "#a0>1"  即第一個參數值大於1時才進行緩存

unless:否定緩存;當unless指定的條件為true,方法的返回值就不會被緩存;可以獲取到的結果進行判斷

            如: unless = 「#a0」:如果第一個參數值是2,則結果不緩存                unless = 「#result == null」  結果為null不緩存結合寫法:

@Cacheable(cacheNames = {"emp"},keyGenerator = "myKeyGenerator",condition = "#a0>1",unless =  "#a0==2")  意思為 放在的緩存名稱為emp中,key的生成方式為配置的myKeyGenerator類,當第一個參數大於1時候緩存,當第一個參數等於2時不緩存

sync:是否使用非同步模式(非同步模式情況下unless不支持)

//@Cacheable(cacheNames = {"emp"},key = "#root.methodName+'['+#id+']'")

public Employee getEmp(Integer id){

        System.out.println("查詢"+id+"號員工");

        Employee emp =  employeeMapper.getEmpById(id);

        return  emp;

    }

此時當id為1時,key的值為 getEmp[1]

@Configuration

public class MyCacheConfig {

    @Bean("myKeyGenerator")

    public KeyGenerator keyGenerator (){

      return  new KeyGenerator(){

            @Override

            public Object generate(Object o, Method method, Object... objects) {

                return method.getName()+"["+ Arrays.asList(objects).toString()+"]";

            }

        };

    };

}

這里返回的key的值為getEmp[[1]]

閱讀全文

與cacheable源碼解析相關的資料

熱點內容
華為筆記本電腦怎麼安裝抖音app 瀏覽:410
阿里雲國際版試用的伺服器怎麼搞 瀏覽:893
java正則表達式工具 瀏覽:158
oa伺服器怎麼設置ftp 瀏覽:8
安卓如何安裝obb 瀏覽:440
QQ聊天記錄journal文件夾 瀏覽:118
蘋果公司雲伺服器地址 瀏覽:85
加密記事本手機 瀏覽:437
汽車壓縮機變頻閥 瀏覽:95
域外伺服器是什麼意思 瀏覽:639
大眾點評伺服器怎麼老卡頓 瀏覽:556
javavector與list的區別 瀏覽:316
java初始化類數組 瀏覽:303
java字元串轉換成json對象 瀏覽:647
android非阻塞socket 瀏覽:358
編譯系統概念 瀏覽:452
天眼通app能做什麼 瀏覽:557
魅族手機怎麼加密圖庫 瀏覽:8
rpa編譯器 瀏覽:572
車載雲伺服器記錄 瀏覽:740