溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring- Cache緩存

發布時間:2020-07-12 00:53:58 來源:網絡 閱讀:5106 作者:huamulanyiyi 欄目:開發技術


在操作緩存中,一般會有以下幾種操作,在Spring的緩存中會對應有幾種注解:


* 獲取數據:從緩存獲得需要數據,如果緩存沒有則從數據庫查詢,再將其保存在緩存;

* 插入數據:先將數據插入數據庫中,再保存到緩存中;

* 更新數據:先將數據更新到數據庫中,再更新相應緩存數據;

* 刪除數據:先從數據庫中刪除數據,再刪除緩存中數據;


spring cache常用注解為:@Cacheable、@CachePut、@CacheEvit

@Cacheable 的作用:適用于獲取數據,如果緩存中有數據,不在調用注解方法;

@CachePut 的作用:適合于插入數據和更新數據。一定會調用真實方法,再將方法返回值保存到緩存;

@CachEvict 的作用:適合于刪除數據。


主要的參數

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


一、xml配置文件

//cacheManager為具體的緩存管理器例如RedisCacheManager

<cache:annotation-driven cache-mamage="cacheManager" />


二、項目中操作

@CacheConfig(cacheNames="prizeinfo")

@Service(value="springRedisService")

public class SpringRedisServiceImpl implements SpringRedisService{

     @Autowired

     private PrizeinfoService prizeinfoService;

    

     @Cacheable(key="'id:'+#id")

     public Prizeinfo getObject(int id) {

          return prizeinfoService.getPrizeinfoById(id);

     }

     @CachePut(key="'id:'+#o.id")

     public Prizeinfo insertObject(Prizeinfo o) {

         prizeinfoService.insertPrizeinfo(o);

          System.out.println("insertObject"+o.getId());

         return o;

     }

     @CacheEvict(key="'id:'+#id")

     public int deleteObjectById(int id) {

          prizeinfoService.deletePrizeinfoById(id);

          return id;

     }

}


三、Spring Cache原理:


 Spring Cache實際是利用Spring Aop原理來實現的。具體的執行流程和源碼,下面將講解


#標簽會默認的創建什么對象??

1. 解析自定義緩存標簽<cache:annotation-driven />


1.1 利用springIoc先解析標簽器類AnnotationDrivenCacheBeanDefinitionParser 。

//存儲自定義標簽和解析標簽類的關系

CacheNamespaceHandler

//解析自定義的標簽的解析器,將xml其生成beandefinition

BeanDefinitionParser

AnnotationDrivenCacheBeanDefinitionParser


1.2  AnnotationDrivenCacheBeanDefinitionParser解析方法parser,解析標簽屬性,創建對應BeanDefinition。(圖解在https://www.processon.com/embed/58afa70be4b0793432a703c9)


//通知器自動代理生成器  名稱:org.springframework.cache.config.internalCacheAdvisor

·InfrastructureAdvisorAutoProxyCreator

//緩存的基本操作

·AnnotationCacheOperationSource

//攔截器類  設置屬性:cacheOperationSources

·CacheInterceptor

//通知器

//設置通知屬性:adviceBeanName:CacheInterceptor  

//設置cacheOperationSource屬性:AnnotationCacheOperationSource

·BeanFactoryCacheOperationSourceAdvisor



#注解的類是何時,通過什么方式和緩存關聯的??

2. 注解緩存類SpringRedisServiceImpl 實例化對象


2.1 使用自動代理創建器的時機:


2.2 自動代理創建器的創建過程:


2.3 調用注解類:


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女