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

SpringBoot?緩存預(yù)熱的實(shí)現(xiàn)

 更新時(shí)間:2024年04月01日 16:20:45   作者:尼古拉斯的夜  
本文主要介紹了SpringBoot?緩存預(yù)熱的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

簡(jiǎn)介:

SpringBoot集合RedisUtil和  CommadnLinRunner實(shí)現(xiàn)緩存預(yù)熱

一、新建一個(gè)緩存抽象類

在redis模塊里面 新建

/**
 * 緩存抽象類
 */
@Component
public abstract class AbstractCache {

    // 初始化緩存
    public void initCache() {

    }

    public <T> T getCache(String key) {
        return null;
    }

    // 清除緩存
    public void clearCache() {

    }

    // 加載緩存
    public void reloadCache() {
        clearCache();
        initCache();
    }
}

二、 新建一個(gè)組件

項(xiàng)目啟動(dòng)之前,預(yù)先加載數(shù)據(jù)。 比如,權(quán)限容器、特殊用戶數(shù)據(jù)等。通常我們可以使用監(jiān)聽器、事件來(lái)操作。 但是,springboot提供了一個(gè)簡(jiǎn)單的方式來(lái)實(shí)現(xiàn)此類需求,即,CommandLineRunner。

這是一個(gè)接口,用戶可以自定義實(shí)現(xiàn)該接口,具體實(shí)現(xiàn)run方法

任何在上下文容器之內(nèi)的bean都可以實(shí)現(xiàn)run方法

如果在上下文中,存在多個(gè)該接口實(shí)現(xiàn)類,可以通過@order注解,指定加載順序

@Component
public class InitCache implements CommandLineRunner {

    @Override
    public void run(String... args) throws Exception {
        // 獲取Springshang上下文對(duì)象
        ApplicationContext applicationContext = SpringContextUtil.getApplicationContext();

        // 獲取目標(biāo)接口下的所有實(shí)現(xiàn)類
        Map<String, AbstractCache> beanMap = applicationContext.getBeansOfType(AbstractCache.class);

        // 調(diào)用init方法
        if (beanMap.isEmpty()) {
            return;
        }

        for (Map.Entry<String, AbstractCache> entry : beanMap.entrySet()) {
            // 通過ApplicationContext的getBean方法來(lái)獲取Spring容器中已初始化的bean
            AbstractCache abstractCache = (AbstractCache) SpringContextUtil.getBean(entry.getValue().getClass());
            // 緩存實(shí)現(xiàn)類 調(diào)用緩存初始方法
            abstractCache.initCache();
        }
    }

}

三、準(zhǔn)備工具類 

3.1 RedisUtil

/**
 *  Redis工具類
 */
@Component
public class RedisUtil {

    @Autowired
    private RedisTemplate redisTemplate;

    /**
     * 存儲(chǔ) key value
     * @param key
     * @param value
     */
    public void set(String key, String value) {
        redisTemplate.opsForValue().set(key, value);
    }

    /**
     * 判斷是否存在 key
     * @param key
     * @return
     */
    public Boolean hasKey(String key){
        return redisTemplate.hasKey(key);
    }
}

3.2  SpringContextUtil

/**
 *  Spring 容器工具類
 */
@Component
public class SpringContextUtil implements ApplicationContextAware {

    private static ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
    }

    // 靜態(tài)方法 提供Spring 上下文對(duì)象
    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }

    // 通過ApplicationContext的getBean方法來(lái)獲取Spring容器中已初始化的bean
    public static Object getBean(Class type) {
        return applicationContext.getBean(type);

    }
}

四、新建緩存實(shí)現(xiàn)類 

在用戶模塊 新建3個(gè)實(shí)現(xiàn)類

4.1 ClassCache

/**
 * 班級(jí)緩存
 */
@Component
public class ClassCache extends AbstractCache {

    @Autowired
    private RedisUtil redisUtil;

    private static final String CLASS_CACHE_KEY = "CLASS";

    @Autowired
    private RedisTemplate redisTemplate;

    @Override
    public void initCache() {
        redisUtil.set("classId", "一年級(jí)一班");
    }

    @Override
    public <T> T getCache(String key) {
        if (!redisTemplate.hasKey(key).booleanValue()) {
            reloadCache();
        }
        return (T) redisTemplate.opsForValue().get(key);
    }

    @Override
    public void clearCache() {
        redisTemplate.delete(CLASS_CACHE_KEY);
    }


}

4.2 SubjectCache 

/**
 *  學(xué)科緩存
 */
@Component
public class SubjectCache extends AbstractCache {

    @Autowired
    private RedisUtil redisUtil;

    private static final String SUBJECT_CACHE_KEY = "SUBJECT";

    @Autowired
    private RedisTemplate redisTemplate;

    @Override
    public void initCache() {
        redisUtil.set("目錄", "化學(xué)");
    }

    @Override
    public <T> T getCache(String key) {
        if (!redisTemplate.hasKey(key).booleanValue()) {
            reloadCache();
        }
        return (T) redisTemplate.opsForValue().get(key);
    }

    @Override
    public void clearCache() {
        redisTemplate.delete(SUBJECT_CACHE_KEY);
    }

}

 4.3 SysUserCache 

/**
 * 學(xué)生緩存
 */
@Component
public class SysUserCache extends AbstractCache {

    @Autowired
    private RedisUtil redisUtil;

    private static final String SYS_USER_CACHE_KEY = "SYS_USER";

    @Autowired
    private RedisTemplate redisTemplate;

    @Override
    public void initCache() {
        redisUtil.set("name", "杰克");
    }

    @Override
    public <T> T getCache(String key) {
        if (!redisTemplate.hasKey(key).booleanValue()) {
            reloadCache();
        }
        return (T) redisTemplate.opsForValue().get(key);
    }

    @Override
    public void clearCache() {
        redisTemplate.delete(SYS_USER_CACHE_KEY);
    }


}

五、測(cè)試 

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

相關(guān)文章

  • SpringBoot配置連接兩個(gè)或多個(gè)數(shù)據(jù)庫(kù)的實(shí)現(xiàn)

    SpringBoot配置連接兩個(gè)或多個(gè)數(shù)據(jù)庫(kù)的實(shí)現(xiàn)

    本文主要介紹了SpringBoot配置連接兩個(gè)或多個(gè)數(shù)據(jù)庫(kù)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • Java中父類Object的常用方法總結(jié)

    Java中父類Object的常用方法總結(jié)

    這篇文章給大家介紹了Java中父類Object的三個(gè)常用方法,對(duì)大家學(xué)習(xí)或使用Java具有一定的參考借鑒價(jià)值,有需要的朋友們下面來(lái)一起看看吧。
    2016-09-09
  • java啟動(dòng)參數(shù)之謎的排查過程

    java啟動(dòng)參數(shù)之謎的排查過程

    在日常操作中,相信很多人對(duì)Java啟動(dòng)參數(shù)存在疑惑,下面這篇文章主要給大家介紹了關(guān)于java啟動(dòng)參數(shù)之謎的排查過程,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • 解讀java?try?catch?異常后還會(huì)繼續(xù)執(zhí)行嗎

    解讀java?try?catch?異常后還會(huì)繼續(xù)執(zhí)行嗎

    這篇文章主要介紹了解讀java?try?catch?異常后還會(huì)不會(huì)繼續(xù)執(zhí)行問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Java中使用COS實(shí)現(xiàn)文件上傳功能

    Java中使用COS實(shí)現(xiàn)文件上傳功能

    cos是O'Rrilly公司開發(fā)的一款用于HTTP上傳文件的OpenSource組件。下面通過本文給大家分享使用COS實(shí)現(xiàn)文件上傳功能,感興趣的朋友一起看看吧
    2017-08-08
  • Mybatis的dao層,service層的封裝方式

    Mybatis的dao層,service層的封裝方式

    這篇文章主要介紹了Mybatis的dao層,service層的封裝方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • springboot用戶數(shù)據(jù)修改的詳細(xì)實(shí)現(xiàn)

    springboot用戶數(shù)據(jù)修改的詳細(xì)實(shí)現(xiàn)

    用戶管理功能作為所有的系統(tǒng)是必不可少的一部分,下面這篇文章主要給大家介紹了關(guān)于springboot用戶數(shù)據(jù)修改的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • SpringMVC核心技術(shù)

    SpringMVC核心技術(shù)

    這篇文章主要介紹了SpringMVC入門實(shí)例,在springmvc入門教程里算是比較不錯(cuò)的,結(jié)構(gòu)也比較完整,需要的朋友可以參考。希望可以幫助到你
    2021-07-07
  • Java中CAS機(jī)制實(shí)現(xiàn)方法詳解

    Java中CAS機(jī)制實(shí)現(xiàn)方法詳解

    傳統(tǒng)的并發(fā)控制手段如synchronized和ReentrantLock雖有效防止資源競(jìng)爭(zhēng),卻可能引起性能開銷,相比之下,CAS(CompareAndSwap)提供一種輕量級(jí)的樂觀鎖策略,通過硬件級(jí)別的原子指令實(shí)現(xiàn)無(wú)鎖并發(fā),提高性能,需要的朋友可以參考下
    2024-09-09
  • 深入探討Java多線程中的volatile變量

    深入探討Java多線程中的volatile變量

    這篇文章主要為大家詳細(xì)并深入的探討Java多線程中的volatile變量,volatile用來(lái)確保將變量的更新操作通知到其他線程,保證了新值能立即同步到主內(nèi)存,以及每次使用前立即從主內(nèi)存刷新,感興趣的小伙伴們可以參考一下
    2016-02-02

最新評(píng)論