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

SpringBoot?緩存預熱的實現(xiàn)

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

簡介:

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

一、新建一個緩存抽象類

在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();
    }
}

二、 新建一個組件

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

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

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

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

@Component
public class InitCache implements CommandLineRunner {

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

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

        // 調用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());
            // 緩存實現(xiàn)類 調用緩存初始方法
            abstractCache.initCache();
        }
    }

}

三、準備工具類 

3.1 RedisUtil

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

    @Autowired
    private RedisTemplate redisTemplate;

    /**
     * 存儲 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);

    }
}

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

在用戶模塊 新建3個實現(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 

/**
 *  學科緩存
 */
@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("目錄", "化學");
    }

    @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 

/**
 * 學生緩存
 */
@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);
    }


}

五、測試 

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

相關文章

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

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

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

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

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

    關于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整合教程(含增刪改查分頁)

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

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

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

    java雙端隊列之ArrayDequeue原理講解

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

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

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

    Java計算幾何圖形面積的實例代碼

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

    Java中Arrays工具類的一些常見方法總結

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

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

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

最新評論

辽中县| 九江市| 广灵县| 东明县| 红安县| 兴和县| 唐山市| 台南县| 三原县| 都江堰市| 金川县| 五指山市| 葵青区| 福海县| 得荣县| 大安市| 开远市| 普宁市| 永靖县| 宁城县| 莆田市| 临沂市| 县级市| 陆丰市| 张家界市| 镇原县| 永泰县| 漠河县| 阳高县| 科尔| 沾益县| 凤庆县| 黑水县| 德阳市| 金塔县| 洛扎县| 博客| 湾仔区| 瑞丽市| 九龙坡区| 安仁县|