最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringCache的簡(jiǎn)介和使用教程

 更新時(shí)間:2021年11月29日 09:30:16   作者:白羊座的橙子的學(xué)習(xí)筆記  
緩存是實(shí)際工作中經(jīng)常使用的一種提高性能的方法,?我們會(huì)在很多場(chǎng)景下來(lái)使用緩存,而spring-cache就是一種簡(jiǎn)單的實(shí)現(xiàn)。通過(guò)本文學(xué)習(xí)可以了解SpringCache的簡(jiǎn)介和使用方法,感興趣的朋友一起看看吧

1、簡(jiǎn)介

Spring 從 3.1 開(kāi)始定義了 org.springframework.cache.Cache 和 org.springframework.cache.CacheManager 接口來(lái)統(tǒng)一不同的緩存技術(shù);

并支持使用 JCache(JSR-107)注解簡(jiǎn)化我們開(kāi)發(fā)

Cache 接口為緩存的組件規(guī)范定義,包含緩存的各種操作集合; Cache 接 口 下 Spring 提 供 了 各 種 xxxCache 的 實(shí) 現(xiàn) ; 如 RedisCache ,

EhCacheCache , ConcurrentMapCache 等;

每次調(diào)用需要緩存功能的方法時(shí),Spring 會(huì)檢查檢查指定參數(shù)的指定的目標(biāo)方法是否已經(jīng)被調(diào)用過(guò);如果有就直接從緩存中獲取方法

調(diào)用后的結(jié)果,如果沒(méi)有就調(diào)用方法并緩存結(jié)果后返回給用戶(hù)。下次調(diào)用直接從緩存中獲取

2、整合SpringCache簡(jiǎn)化緩存開(kāi)發(fā)

1)引入依賴(lài)

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

2)添加配置

spring.cache.type=redis

3)測(cè)試使用緩存

@Cacheable   觸發(fā)將數(shù)據(jù)保存到緩存的操作
@CacheEvict  將數(shù)據(jù)從緩存刪除
@CachePut    不影響方法執(zhí)行 更新緩存
@Caching     組合以上多個(gè)操作
@CacheConfig 在類(lèi)級(jí)別,共享緩存的相同配置

①、主啟動(dòng)類(lèi)上添加 @EnableCache注解,開(kāi)啟緩存功能

②、只需要使用注解就可以完成緩存操作

當(dāng)方法的結(jié)果需要緩存到數(shù)據(jù)庫(kù),在方法上加上 @CacheEnable注解

/*
1、每一個(gè)需要緩存的數(shù)據(jù),我們都要來(lái)指定要放到哪個(gè)名字的緩存。【相當(dāng)于緩存的分區(qū)(按照業(yè)務(wù)類(lèi)型來(lái)進(jìn)行分區(qū))】
2、代表當(dāng)前方法的結(jié)果需要緩存,如果緩存中有,方法不調(diào)用;如果緩存中沒(méi)有,會(huì)調(diào)用方法,并將方法返回的結(jié)果放入緩存
3、默認(rèn)行為
    1)如果緩存中有,方法不能調(diào)用
    2)key值默認(rèn)生成,緩存的名字::simplekey []
    3)緩存的value的值默認(rèn)使用jdk序列化機(jī)制,將序列化后的數(shù)據(jù)存儲(chǔ)到redis
    4)默認(rèn)緩存過(guò)期時(shí)間是-1(用戶(hù)過(guò)期)

    自定義:
    1)指定緩存生成的key: 指定key-> spel表達(dá)式
    2)指定緩存的數(shù)據(jù)的過(guò)期時(shí)間:配置文件指定
    3)將數(shù)據(jù)保存為json格式:

*/
@Cacheable("category")
@Override
public List<CategoryEntity> getLevel1Categorys() {
    System.out.println("getLevel1Categorys方法執(zhí)行......");
    List<CategoryEntity> categoryEntities = this.baseMapper
        .selectList(new QueryWrapper<CategoryEntity>().eq("parent_cid", "0"));
    return categoryEntities;
}

第一次訪問(wèn)該方法時(shí),需要訪問(wèn)數(shù)據(jù)庫(kù);第二次訪問(wèn)該方法時(shí),則直接從緩存中獲取

③、以自定義的方式設(shè)置key的名稱(chēng)和過(guò)期時(shí)間

@Cacheable(value = {"category"},key="'level1Categorys'")

配置文件中添加

#以毫秒為單位
spring.cache.redis.time-to-live=3600000

④、更多自定義配置

配置key,value的序列化機(jī)制:

/**
 * @author houChen
 * @date 2021/11/4 6:59
 * @Description:
 *
 * 緩存配置類(lèi)
 *    @ConfigurationProperties(prefix = "spring.cache") : 只是使類(lèi)中的屬性和配置文件綁定,并不能注入到容器中
 *
 */
@EnableConfigurationProperties(CacheProperties.class)    //@EnableConfigurationProperties注解 可以使CacheProperties類(lèi)注入到容器中
@Configuration
@EnableCaching
public class MyCacheConfig {

    @Bean
    RedisCacheConfiguration redisCacheConfiguration(CacheProperties cacheProperties){
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
        config=config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()));
        config=config.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));

        CacheProperties.Redis redisCacheProperties = cacheProperties.getRedis();
        if(redisCacheProperties.getTimeToLive()!=null){
            config = config.entryTtl(redisCacheProperties.getTimeToLive());
        }
        return config;
    }
}

⑤、使用@CacheEvict (去除緩存)

指定刪除某個(gè)分區(qū)下的所有數(shù)據(jù)

@CacheEvict(value="category",allEntries=true)

約定:

同一個(gè)類(lèi)型的數(shù)據(jù),可以緩存在相同名稱(chēng)的分區(qū)中!

3、SpringCache的原理和不足

1)讀模式

緩存穿透:查詢(xún)一個(gè)null數(shù)據(jù)。解決:緩存空數(shù)據(jù):cache-null-values=true

緩存擊穿:大量并發(fā)請(qǐng)求進(jìn)來(lái)同時(shí)查詢(xún)一個(gè)正好過(guò)期的數(shù)據(jù)。 解決: 加鎖

緩存雪崩:大量的key同時(shí)過(guò)期 解決:加隨機(jī)時(shí)間

2)寫(xiě)模式 (如何保證緩存和數(shù)據(jù)庫(kù)一致性)

1)加鎖模式

2)引入canal

3)讀多寫(xiě)多,直接去數(shù)據(jù)庫(kù)查詢(xún)

到此這篇關(guān)于SpringCache的簡(jiǎn)介和使用教程的文章就介紹到這了,更多相關(guān)SpringCache使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java用BigDecimal類(lèi)解決Double類(lèi)型精度丟失的問(wèn)題

    Java用BigDecimal類(lèi)解決Double類(lèi)型精度丟失的問(wèn)題

    這篇文章主要介紹了Java用BigDecimal類(lèi)解決Double類(lèi)型精度丟失的問(wèn)題,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-12-12
  • 簡(jiǎn)單注解實(shí)現(xiàn)集群同步鎖(spring+redis+注解)

    簡(jiǎn)單注解實(shí)現(xiàn)集群同步鎖(spring+redis+注解)

    本文主要介紹了簡(jiǎn)單注解實(shí)現(xiàn)集群同步鎖的步驟與方法。具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-01-01
  • Java分布式鎖理論(redis、zookeeper))案例詳解

    Java分布式鎖理論(redis、zookeeper))案例詳解

    zookeeper有個(gè)節(jié)點(diǎn)路徑的概念,節(jié)點(diǎn)路徑不能重復(fù),保證了唯一性,這篇文章給大家介紹Java分布式鎖理論(redis、zookeeper)?案例詳解,感興趣的朋友跟隨小編一起看看吧
    2024-01-01
  • Java中使用Closeable接口自動(dòng)關(guān)閉資源詳解

    Java中使用Closeable接口自動(dòng)關(guān)閉資源詳解

    這篇文章主要介紹了Java中使用Closeable接口自動(dòng)關(guān)閉資源詳解,Closeable接口繼承于AutoCloseable,主要的作用就是自動(dòng)的關(guān)閉資源,其中close()方法是關(guān)閉流并且釋放與其相關(guān)的任何方法,如果流已被關(guān)閉,那么調(diào)用此方法沒(méi)有效果,需要的朋友可以參考下
    2023-12-12
  • Java實(shí)現(xiàn)簡(jiǎn)單LRU緩存機(jī)制的方法

    Java實(shí)現(xiàn)簡(jiǎn)單LRU緩存機(jī)制的方法

    這篇文章主要介紹了Java實(shí)現(xiàn)簡(jiǎn)單LRU緩存機(jī)制的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • spring初始化方法的執(zhí)行順序及其原理分析

    spring初始化方法的執(zhí)行順序及其原理分析

    這篇文章主要介紹了spring初始化方法的執(zhí)行順序及其原理分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Spring源碼解析之Bean的生命周期

    Spring源碼解析之Bean的生命周期

    今天給大家?guī)?lái)的是關(guān)于Java源碼的相關(guān)知識(shí),文章圍繞著B(niǎo)ean的生命周期展開(kāi),文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • java 中enum的使用方法詳解

    java 中enum的使用方法詳解

    這篇文章主要介紹了java 中enum的使用方法詳解的相關(guān)資料,希望通過(guò)本文能幫助到大家,理解掌握java 中enum的使用方法,需要的朋友可以參考下
    2017-09-09
  • 解決scala.collection.mutable.Map寫(xiě)入的問(wèn)題

    解決scala.collection.mutable.Map寫(xiě)入的問(wèn)題

    這篇文章主要介紹了解決scala.collection.mutable.Map寫(xiě)入的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • java8實(shí)現(xiàn)List中對(duì)象屬性的去重方法

    java8實(shí)現(xiàn)List中對(duì)象屬性的去重方法

    這篇文章主要介紹了java8實(shí)現(xiàn)List中對(duì)象屬性的去重方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03

最新評(píng)論

泸水县| 如东县| 昭通市| 壤塘县| 厦门市| 东阳市| 花莲市| 进贤县| 神农架林区| 凤翔县| 巴彦淖尔市| 江安县| 白沙| 宁安市| 滨州市| 青河县| 贵德县| 九龙县| 安远县| 大洼县| 阳泉市| 汕尾市| 仪陇县| 乌兰察布市| 皋兰县| 汶上县| 茶陵县| 陇南市| 贡觉县| 柘荣县| 大埔区| 桦南县| 远安县| 黎城县| 镇赉县| 清远市| 嵩明县| 丰台区| 河西区| 临安市| 休宁县|