第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

spring cache 簡(jiǎn)單原理

標(biāo)簽:
Java
  • spring cache启动开关 EnabelCaching

@EnableAsync
@SpringBootApplication(scanBasePackages = {"com.lls.asset.service"}, exclude = { DataSourceAutoConfiguration.class, MybatisPlusConfig.class })
@NacosPropertySources({
        @NacosPropertySource(dataId = "ast-service", autoRefreshed = true, type = ConfigType.YAML)
})
@EnableAspectJAutoProxy(exposeProxy = true)
@
public class AstServiceRunApplication {
    public static void main(String[] args) {
        SpringApplication.run(AstServiceRunApplication.class, args);
    }
}
  • CacheManager spi,缓存管理器,提供了访问缓存名称和缓存对象的方法。spring 本身提供了simpleCacheManager 、compositeCacheManager等管理器的实现。我们项目用的是redisCacheManager,需要配置maven如下。

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
spring提供基础类AbstractCacheManager 提供了缓存管理的能力,该类根据缓存名称来获取某个缓存,
ConcurrentMap<String, Cache> 这里的Cache在我们的项目里就是RedisCache ,然后在从RedisCache对象中根据
根据key获取缓存值。

https://img3.sycdn.imooc.com/5fc84c7c00014fbe07980121.jpg

public abstract class AbstractCacheManager implements CacheManager, InitializingBean {
  private final ConcurrentMap<String, Cache> cacheMap = new ConcurrentHashMap<>(16);
  //根据缓存名称获取这个缓存

public Cache getCache(String name) {
  Cache cache = this.cacheMap.get(name);
  if (cache != null) {
     return cache;
  
  else {
     // Fully synchronize now for missing cache creation...
     synchronized (this.cacheMap) {
        cache = this.cacheMap.get(name);
        if (cache == null) {
           cache = getMissingCache(name);
           if (cache != null) {
              cache = decorateCache(cache);
              this.cacheMap.put(name, cache);
              updateCacheNames(name);
           }
        }
        return cache;
     }
  }
  • spring提供的基础类AbstractValueAdaptingCache implements Cache 拥有 取出缓存对象,删除缓存的接口,  AbstractValueAdaptingCache 根据key获取缓存对象的方法。lookup(value) 具体实现就是从redisCache获取

AbstractValueAdaptingCache 提供的get 方法。
public <T> T get(Object key, @Nullable Class<T> type) {
  Object value = fromStoreValue(lookup(key));
  if (value != null && type != null && !type.isInstance(value)) {
     throw new IllegalStateException(
           "Cached value is not of required type [" + type.getName() + "]: " + value);
  }
  return (T) value;
}
RedisCache 提供的lookup 具体查找key,value的方法:
protected Object lookup(Object key) {

   byte[] value = cacheWriter.get(name, createAndConvertCacheKey(key));

   if (value == null) {
      return null;
   }

   return deserializeCacheValue(value);
}
  • redis cache根据key获取缓存对象,之中的key就是对象的toString。因此如果key是某个object那么缓存的

的key值就是toString。



點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消