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

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

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

簡介:

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)聽器、事件來操作。 但是,springboot提供了一個(gè)簡單的方式來實(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上下文對象
        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方法來獲取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 上下文對象
    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }

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

    }
}

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

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

4.1 ClassCache

/**
 * 班級緩存
 */
@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", "一年級一班");
    }

    @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);
    }


}

五、測試 

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

相關(guān)文章

  • SpringBoot環(huán)境搭建及第一個(gè)程序運(yùn)行(小白教程)

    SpringBoot環(huán)境搭建及第一個(gè)程序運(yùn)行(小白教程)

    這篇文章主要介紹了SpringBoot環(huán)境搭建及第一個(gè)程序運(yùn)行,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • 基于Struts2實(shí)現(xiàn)防止表單重復(fù)提交

    基于Struts2實(shí)現(xiàn)防止表單重復(fù)提交

    這篇文章主要介紹了基于Struts2實(shí)現(xiàn)防止表單重復(fù)提交,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • 關(guān)于SpringBoot整合Canal數(shù)據(jù)同步的問題

    關(guān)于SpringBoot整合Canal數(shù)據(jù)同步的問題

    大家都知道canal是阿里巴巴旗下的一款開源工具,純java開發(fā),支持mysql數(shù)據(jù)庫,本文給大家介紹SpringBoot整合Canal數(shù)據(jù)同步的問題,需要的朋友可以參考下
    2022-03-03
  • SpringMVC4 + MyBatis3 + SQL Server 2014整合教程(含增刪改查分頁)

    SpringMVC4 + MyBatis3 + SQL Server 2014整合教程(含增刪改查分頁)

    這篇文章主要給大家介紹了關(guān)于SpringMVC4 + MyBatis3 + SQL Server 2014整合的相關(guān)資料,文中包括介紹了增刪改查分頁等相關(guān)內(nèi)容,通過示例代碼介紹的非常詳細(xì),分享出來供大家參考學(xué)習(xí),下面來一起看看吧。
    2017-06-06
  • Java實(shí)現(xiàn)byte[]轉(zhuǎn)List的示例代碼

    Java實(shí)現(xiàn)byte[]轉(zhuǎn)List的示例代碼

    byte,即字節(jié),由8位的二進(jìn)制組成。在Java中,byte類型的數(shù)據(jù)是8位帶符號的二進(jìn)制數(shù)。List?是一個(gè)接口,它繼承于Collection的接口。它代表著有序的隊(duì)列。本文將介紹如何通過java實(shí)現(xiàn)byte[]轉(zhuǎn)List,需要的可以參考一下
    2022-01-01
  • java雙端隊(duì)列之ArrayDequeue原理講解

    java雙端隊(duì)列之ArrayDequeue原理講解

    這篇文章主要為大家介紹了java雙端隊(duì)列之ArrayDequeue原理講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Spring Boot集群管理工具KafkaAdminClient使用方法解析

    Spring Boot集群管理工具KafkaAdminClient使用方法解析

    這篇文章主要介紹了Spring Boot集群管理工具KafkaAdminClient使用方法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Java計(jì)算幾何圖形面積的實(shí)例代碼

    Java計(jì)算幾何圖形面積的實(shí)例代碼

    這篇文章主要介紹了Java計(jì)算幾何圖形面積的實(shí)例代碼,需要的朋友可以參考下
    2014-03-03
  • Java中Arrays工具類的一些常見方法總結(jié)

    Java中Arrays工具類的一些常見方法總結(jié)

    在Java中Arrays類是一個(gè)實(shí)用工具類,用于在數(shù)組上執(zhí)行各種操作,包括排序、搜索、比較等,這篇文章主要給大家介紹了關(guān)于Java中Arrays工具類的一些常見方法,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2024-02-02
  • 使用IntelliJ IDEA查看類的繼承關(guān)系圖形(圖文詳解)

    使用IntelliJ IDEA查看類的繼承關(guān)系圖形(圖文詳解)

    這篇文章主要介紹了使用IntelliJ IDEA查看類的繼承關(guān)系圖形,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的工作或?qū)W習(xí)具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03

最新評論

秭归县| 丰城市| 大理市| 新建县| 舒城县| 长岛县| 绥阳县| 大同市| 阿克| 阿瓦提县| 阿拉尔市| 大安市| 汉寿县| 库尔勒市| 惠安县| 廉江市| 嘉义市| 龙游县| 郯城县| 河间市| 阿拉善左旗| 上高县| 临安市| 大化| 高要市| 安阳市| 日照市| 伽师县| 瑞丽市| 德惠市| 乡城县| 渝中区| 独山县| 兴隆县| 宁波市| 宿松县| 镇远县| 宁晋县| 通山县| 望都县| 锡林浩特市|