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

Springboot實現(xiàn)緩存預(yù)熱的方法

 更新時間:2024年03月05日 10:52:35   作者:Spirit_NKlaus  
在系統(tǒng)啟動之前通過預(yù)先將常用數(shù)據(jù)加載到緩存中,以提高緩存命中率和系統(tǒng)性能的過程,緩存預(yù)熱的目的是盡可能地避免緩存擊穿和緩存雪崩,這篇文章主要介紹了Springboot實現(xiàn)緩存預(yù)熱,需要的朋友可以參考下

很多時候我們代碼中使用緩存時都是先判斷緩存中沒有數(shù)據(jù)我們再讀取數(shù)據(jù)庫而有則直接使用緩存數(shù)據(jù),而在系統(tǒng)冷啟動(當(dāng)系統(tǒng)重啟或新啟動時,緩存是空的,這被稱為冷啟動)時,我們毫無意外都是直接獲取數(shù)據(jù)庫的內(nèi)容,這時候緩存的命中率幾乎為0,這時候我們需要考慮業(yè)務(wù)系統(tǒng)的緩存預(yù)熱功能,在系統(tǒng)啟動之前通過預(yù)先將常用數(shù)據(jù)加載到緩存中,以提高緩存命中率和系統(tǒng)性能的過程。緩存預(yù)熱的目的是盡可能地避免緩存擊穿和緩存雪崩。

一、系統(tǒng)啟動時加載

1、CommandLineRunner和ApplicationRunner是SpringBoot中用于在應(yīng)用程序啟動后執(zhí)行特定邏輯的接口。

import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
/**
 * 緩存預(yù)熱器(CommandLineRunner方式)
 */
@Component
@Slf4j
public class CacheCLRunner implements CommandLineRunner {
    @Override
    public void run(String... args) throws Exception {
        //TODO 緩存預(yù)熱邏輯
        log.info("CommandLineRunner方式完成緩存預(yù)熱");
    }
}
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
/**
 * 緩存預(yù)熱器(ApplicationRunner方式)
 */
@Component
@Slf4j
public class CacheAppRunner implements ApplicationRunner {
    @Override
    public void run(ApplicationArguments args) throws Exception {
        //TODO 緩存預(yù)熱邏輯
        log.info("ApplicationRunner方式完成緩存預(yù)熱");
    }
}

2、實現(xiàn)InitializingBean接口,并在afterPropertiesSet方法中執(zhí)行緩存預(yù)熱的邏輯。這樣Spring在初始化Bean時會調(diào)用afterPropertiesSet方法

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;
/**
 * 緩存預(yù)熱器(InitializingBean方式)
 */
@Component
@Slf4j
public class CacheInitializing implements InitializingBean {
    @Override
    public void afterPropertiesSet() throws Exception {
        //TODO 緩存預(yù)熱邏輯
        log.info("InitializingBean方式完成緩存預(yù)熱");
    }
}

3、基于ApplicationReadyEvent,我們可以在應(yīng)用程序完全啟動并處于可用狀態(tài)后執(zhí)行一些初始化邏輯。使用@EventListener注解或?qū)崿F(xiàn)ApplicationListener接口來監(jiān)聽這個事件。
4、@PostConstruct注解標注一個方法,該方法將在 Bean 的構(gòu)造函數(shù)執(zhí)行完畢后立即被調(diào)用。
這里3、4點的例子寫在一起

import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
/**
 * 緩存預(yù)熱器(ApplicationReadyEvent和@PostConstruct方式)
 */
@Component
@Slf4j
public class CacheLoader {
    @EventListener(ApplicationReadyEvent.class)
    public void loadCache1() {
        //TODO 緩存預(yù)熱邏輯
        log.info("@EventListener方式完成緩存預(yù)熱");
    }
    @PostConstruct
    public void loadCache2() {
        //TODO 緩存預(yù)熱邏輯
        log.info("@PostConstruct方式完成緩存預(yù)熱");
    }
}

啟動項目大致看一下4種方式的加載順序,可根據(jù)自己的需求選擇對應(yīng)的方式

二、定時任務(wù)加載

使用Spring的@Scheduled,quartz,xxl-job都可以,@Scheduled為例

@Scheduled(cron = "0 0 1 * * ?") // 每天凌晨1點執(zhí)行
public void scheduledCachePreload() {
	//TODO 緩存預(yù)熱邏輯
	log.info("定時任務(wù)方式完成緩存預(yù)熱");
}

更多java知識請點擊下方名片!

到此這篇關(guān)于Springboot實現(xiàn)緩存預(yù)熱的文章就介紹到這了,更多相關(guān)Springboot緩存預(yù)熱內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java排序算法總結(jié)之希爾排序

    Java排序算法總結(jié)之希爾排序

    這篇文章主要介紹了Java排序算法總結(jié)之希爾排序,較為詳細的分析了希爾排序的原理與java的實現(xiàn)技巧,需要的朋友可以參考下
    2015-05-05
  • spring?boot常見get?、post請求參數(shù)處理、參數(shù)注解校驗、參數(shù)自定義注解校驗問題解析

    spring?boot常見get?、post請求參數(shù)處理、參數(shù)注解校驗、參數(shù)自定義注解校驗問題解析

    這篇文章主要介紹了spring?boot常見get?、post請求參數(shù)處理、參數(shù)注解校驗、參數(shù)自定義注解校驗,本文通過示例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • Redis Java 集成到 Spring Boot的詳細過程

    Redis Java 集成到 Spring Boot的詳細過程

    本文介紹了如何使用SpringBoot連接Redis,并展示了如何配置Redis服務(wù)地址、創(chuàng)建Controller類以及進行基本的Redis操作,如字符串、列表、集合、哈希和有序集合,感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • java實現(xiàn)將數(shù)字轉(zhuǎn)換成人民幣大寫

    java實現(xiàn)將數(shù)字轉(zhuǎn)換成人民幣大寫

    前面給大家介紹過使用javascript,php,c#,python等語言實現(xiàn)人民幣大寫格式化,這篇文章主要介紹了java實現(xiàn)將數(shù)字轉(zhuǎn)換成人民幣大寫的代碼,非常的簡單實用,分享給大家,需要的朋友可以參考下
    2015-04-04
  • SpringBoot解決mysql連接8小時問題

    SpringBoot解決mysql連接8小時問題

    服務(wù)連接mysql數(shù)據(jù)庫,8小時沒有數(shù)據(jù)庫的操作時候,數(shù)據(jù)庫會主動斷開連接釋放資源,本文就詳細的介紹一下解決方法,感興趣的可以了解一下
    2023-08-08
  • SpringBoot4.0整合RabbitMQ死信隊列詳解

    SpringBoot4.0整合RabbitMQ死信隊列詳解

    本文主要介紹了SpringBoot4.0整合RabbitMQ死信隊列詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-02-02
  • JAVA文件讀寫操作詳解

    JAVA文件讀寫操作詳解

    這篇文章主要為大家詳細介紹了JAVA文件讀寫操作,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • java判斷是否為圖片的步驟和方法

    java判斷是否為圖片的步驟和方法

    在本篇內(nèi)容里小編給大家分享的是關(guān)于java判斷是否為圖片的做法和步驟,需要的朋友們學(xué)習(xí)下。
    2018-12-12
  • Springboot源碼 TargetSource解析

    Springboot源碼 TargetSource解析

    這篇文章主要介紹了Springboot源碼 TargetSource解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • JDBC獲取元數(shù)據(jù)demo

    JDBC獲取元數(shù)據(jù)demo

    這篇文章主要為大家介紹了JDBC獲取元數(shù)據(jù)實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11

最新評論

南安市| 双鸭山市| 新建县| 鸡东县| 特克斯县| 南华县| 桦川县| 新晃| 庐江县| 成安县| 富蕴县| 平凉市| 娄底市| 峨眉山市| 玉门市| 察雅县| 湄潭县| 光山县| 鹤峰县| 久治县| 福清市| 延边| 巢湖市| 新乡县| 江源县| 渭南市| 襄汾县| 逊克县| 玉屏| 贵德县| 林西县| 镇远县| 天柱县| 竹溪县| 谢通门县| 安新县| 榆中县| 长岭县| 永靖县| 桑日县| 宣威市|