欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringCache的簡介和使用教程

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

1、簡介

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

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

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

EhCacheCache , ConcurrentMapCache 等;

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

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

2、整合SpringCache簡化緩存開發(fā)

1)引入依賴

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

2)添加配置

spring.cache.type=redis

3)測試使用緩存

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

①、主啟動類上添加 @EnableCache注解,開啟緩存功能

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

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

/*
1、每一個需要緩存的數(shù)據(jù),我們都要來指定要放到哪個名字的緩存?!鞠喈斢诰彺娴姆謪^(qū)(按照業(yè)務(wù)類型來進行分區(qū))】
2、代表當前方法的結(jié)果需要緩存,如果緩存中有,方法不調(diào)用;如果緩存中沒有,會調(diào)用方法,并將方法返回的結(jié)果放入緩存
3、默認行為
    1)如果緩存中有,方法不能調(diào)用
    2)key值默認生成,緩存的名字::simplekey []
    3)緩存的value的值默認使用jdk序列化機制,將序列化后的數(shù)據(jù)存儲到redis
    4)默認緩存過期時間是-1(用戶過期)

    自定義:
    1)指定緩存生成的key: 指定key-> spel表達式
    2)指定緩存的數(shù)據(jù)的過期時間:配置文件指定
    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;
}

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

③、以自定義的方式設(shè)置key的名稱和過期時間

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

配置文件中添加

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

④、更多自定義配置

配置key,value的序列化機制:

/**
 * @author houChen
 * @date 2021/11/4 6:59
 * @Description:
 *
 * 緩存配置類
 *    @ConfigurationProperties(prefix = "spring.cache") : 只是使類中的屬性和配置文件綁定,并不能注入到容器中
 *
 */
@EnableConfigurationProperties(CacheProperties.class)    //@EnableConfigurationProperties注解 可以使CacheProperties類注入到容器中
@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 (去除緩存)

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

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

約定:

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

3、SpringCache的原理和不足

1)讀模式

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

緩存擊穿:大量并發(fā)請求進來同時查詢一個正好過期的數(shù)據(jù)。 解決: 加鎖

緩存雪崩:大量的key同時過期 解決:加隨機時間

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

1)加鎖模式

2)引入canal

3)讀多寫多,直接去數(shù)據(jù)庫查詢

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

相關(guān)文章

  • java仿Servlet生成驗證碼實例詳解

    java仿Servlet生成驗證碼實例詳解

    這篇文章主要介紹了java仿Servlet生成驗證碼實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • JavaSE、JavaEE和JavaWeb三大工程目錄詳解

    JavaSE、JavaEE和JavaWeb三大工程目錄詳解

    這篇文章主要給大家介紹了關(guān)于JavaSE、JavaEE和JavaWeb三大工程目錄的相關(guān)資料,很多對java不是很了解的同學在看到課程?綱的時候發(fā)現(xiàn)??出現(xiàn)了JavaSE、JavaEE、JavaME、JavaWEB這些詞,搞得?頭霧?,需要的朋友可以參考下
    2023-07-07
  • 解析如何開發(fā)FineReport的自定義控件

    解析如何開發(fā)FineReport的自定義控件

    FineReport作為插件化開發(fā)的報表軟件,有些特殊需求的功能需要自己開發(fā),開發(fā)的插件包帆軟官方有提提供,可以去帆軟論壇上找,本文將主要介紹如何開發(fā)一個自定義控件,這里講講方法論。需要的朋友一起來看下吧
    2016-12-12
  • Java責任鏈模式模板代碼分享

    Java責任鏈模式模板代碼分享

    這篇文章主要介紹了Java責任鏈模式模板代碼分享,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • 使用@DS輕松解決動態(tài)數(shù)據(jù)源的問題

    使用@DS輕松解決動態(tài)數(shù)據(jù)源的問題

    這篇文章主要介紹了使用@DS輕松解決動態(tài)數(shù)據(jù)源的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • springboot2.1.7整合thymeleaf代碼實例

    springboot2.1.7整合thymeleaf代碼實例

    這篇文章主要介紹了springboot2.1.7整合thymeleaf代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • Java實現(xiàn)簡易的洗牌和發(fā)牌功能

    Java實現(xiàn)簡易的洗牌和發(fā)牌功能

    本文主要介紹了Java實現(xiàn)簡易的洗牌和發(fā)牌功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • Java方法遞歸調(diào)用實例解析

    Java方法遞歸調(diào)用實例解析

    這篇文章主要介紹了Java方法遞歸調(diào)用實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • Javaweb獲取表單數(shù)據(jù)的多種方式

    Javaweb獲取表單數(shù)據(jù)的多種方式

    這篇文章主要為大家詳細介紹了Javaweb獲取表單數(shù)據(jù)的多種方式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Java多線程之并發(fā)編程的基石CAS機制詳解

    Java多線程之并發(fā)編程的基石CAS機制詳解

    這篇文章主要介紹了java并發(fā)編程之cas詳解,涉及cas使用場景和cas用作原子操作等內(nèi)容,具有一定參考價值,需要的朋友可以了解下
    2021-09-09

最新評論