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

Spring @Cacheable自定義緩存過期時(shí)間的實(shí)現(xiàn)示例

 更新時(shí)間:2024年05月27日 11:56:27   作者:路漫修遠(yuǎn) 上下求索  
本文主要介紹了Spring @Cacheable自定義緩存過期時(shí)間的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

實(shí)現(xiàn)效果

原來的@Cacheable使用方式:

@Cacheable(value = "userinfo", key = "#dto.userId")

實(shí)現(xiàn)后的使用方式:

@Cacheable(value = "userinfo#30#m", key = "#dto.userId")

實(shí)現(xiàn)代碼

創(chuàng)建一個(gè)自定義的緩存管理器,繼承自RedisCacheManager

public class CustomRedisCacheManager extends RedisCacheManager {
    
    public CustomRedisCacheManager(RedisCacheWriter cacheWriter, RedisCacheConfiguration defaultCacheConfiguration) {
        super(cacheWriter, defaultCacheConfiguration);
    }

    /**
     * 重寫createRedisCache方法
     * @param name 原來的name只是作為redis存儲(chǔ)鍵名
     *             重寫的name可通過"#"拼接過期時(shí)間:
     *             1. 如果沒有"#"則默認(rèn)不設(shè)置過期時(shí)間
     *             2. 拼接的第一個(gè)"#"后面為過期時(shí)間,第二個(gè)"#"后面為時(shí)間單位
     *             3. 時(shí)間單位的表示使用: d(天)、h(小時(shí))、m(分鐘)、s(秒), 默認(rèn)為h(小時(shí))
     * @param cacheConfig
     * @return
     */
    @Override
    protected RedisCache createRedisCache(String name, RedisCacheConfiguration cacheConfig) {
        // 解析name,設(shè)置過期時(shí)間
        if (StringUtils.isNotEmpty(name) && name.contains("#")) {
            String[] split = name.split("#");

            // 緩存鍵名
            String cacheName = split[0];
            // "#"后第一位是時(shí)間
            int expire = Integer.parseInt(split[1]);
            // 過期時(shí)間,默認(rèn)為h(小時(shí))
            Duration duration = Duration.ofHours(expire);
            // 根據(jù)"#"后第二位字符判斷過期時(shí)間的單位,設(shè)置相應(yīng)的過期時(shí)間,默認(rèn)時(shí)間單位是h(小時(shí))
            if (split.length == 3) {
                switch (split[2]){
                    case "d":
                        duration = Duration.ofDays(expire);
                        break;
                    case "m":
                        duration = Duration.ofMinutes(expire);
                        break;
                    case "s":
                        duration = Duration.ofSeconds(expire);
                        break;
                    default:
                        duration = Duration.ofHours(expire);
                }
            }
            return super.createRedisCache(cacheName, cacheConfig.entryTtl(duration));
        }
        return super.createRedisCache(name, cacheConfig);
    }
}

在redis配置類中,將上面自定義的緩存管理器注冊(cè)為Bean

@Configuration
@EnableCaching
public class RedisConfig {
    
    /**
     * 自定義RedisTemplate
     * 設(shè)置Redis序列化方式,默認(rèn)使用的是JDKSerializer的序列化方式,效率低,所以這里設(shè)置使用FastJsonRedisSerializer
     * @param connectionFactory
     * @return
     */
    @Bean
    @SuppressWarnings(value = {"unchecked", "rawtypes"})
    public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory connectionFactory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();

        // 設(shè)置redis連接(LettuceConnectionFactory實(shí)現(xiàn)了RedisConnectionFactory)
        redisTemplate.setConnectionFactory(connectionFactory);

        FastJsonRedisSerializer serializer = new FastJsonRedisSerializer(Object.class);

        // key設(shè)置StringRedisSerializer序列化
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        // value設(shè)置FastJsonRedisSerializer序列化
        redisTemplate.setValueSerializer(serializer);

        // Hash key設(shè)置序列化
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        // Hash value設(shè)置序列化
        redisTemplate.setHashValueSerializer(serializer);

        return redisTemplate;
    }


    /**
     * 實(shí)例化自定義的緩存管理器
     * @param redisTemplate
     * @return
     */
    @Bean
    @SuppressWarnings(value = {"unchecked", "rawtypes"})
    public RedisCacheManager redisCacheManager(RedisTemplate redisTemplate) {
        RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(Objects.requireNonNull(redisTemplate.getConnectionFactory()));
        RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(redisTemplate.getValueSerializer()));
        return new CustomRedisCacheManager(redisCacheWriter, redisCacheConfiguration);
    }
}

到此這篇關(guān)于Spring @Cacheable自定義緩存過期時(shí)間的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Spring @Cacheable緩存過期時(shí)間內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • java 實(shí)現(xiàn)增量同步和自定義同步的操作

    java 實(shí)現(xiàn)增量同步和自定義同步的操作

    這篇文章主要介紹了java 實(shí)現(xiàn)增量同步和自定義同步的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • Hadoop中的壓縮與解壓縮案例詳解

    Hadoop中的壓縮與解壓縮案例詳解

    壓縮就是通過某種技術(shù)(算法)把原始文件變下,相應(yīng)的解壓就是把壓縮后的文件變成原始文件,本文給大家分享Hadoop中的壓縮知識(shí),感興趣的朋友跟隨小編一起看看吧
    2021-12-12
  • Java中json與javaBean幾種互轉(zhuǎn)的講解

    Java中json與javaBean幾種互轉(zhuǎn)的講解

    今天小編就為大家分享一篇關(guān)于Java中json與javaBean幾種互轉(zhuǎn)的講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • SpringBoot整合Echarts繪制靜態(tài)數(shù)據(jù)柱狀圖和餅圖

    SpringBoot整合Echarts繪制靜態(tài)數(shù)據(jù)柱狀圖和餅圖

    這篇文章給大家介紹了SpringBoot整合Echarts繪制靜態(tài)數(shù)據(jù)柱狀圖和餅圖,文中通過代碼示例給大家介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-03-03
  • Java異常分類處理拋出捕獲操作詳解

    Java異常分類處理拋出捕獲操作詳解

    異常就是不正常,比如當(dāng)我們身體出現(xiàn)了異常我們會(huì)根據(jù)身體情況選擇喝開水、吃藥、看病、等 異常處理方法。 java異常處理機(jī)制是我們java語言使用異常處理機(jī)制為程序提供了錯(cuò)誤處理的能力,程序出現(xiàn)的錯(cuò)誤,程序可以安全的退出,以保證程序正常的運(yùn)行等
    2022-09-09
  • java設(shè)計(jì)優(yōu)化之單例模式

    java設(shè)計(jì)優(yōu)化之單例模式

    這篇文章主要為大家詳細(xì)介紹了java設(shè)計(jì)優(yōu)化中的單例模式,深入學(xué)習(xí)java單例模式,感興趣的朋友可以參考一下
    2016-03-03
  • 解決Java壓縮zip異常java.util.zip.ZipException:duplicate entry:問題

    解決Java壓縮zip異常java.util.zip.ZipException:duplicate entry

    這篇文章主要介紹了解決Java壓縮zip異常java.util.zip.ZipException:duplicate entry:問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java 詳解如何獲取網(wǎng)絡(luò)接口信息

    Java 詳解如何獲取網(wǎng)絡(luò)接口信息

    讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)踐中才能獲得能力的提升,本篇文章手把手帶你用Java獲取網(wǎng)絡(luò)接口的信息,大家可以在過程中查缺補(bǔ)漏,提升水平
    2021-11-11
  • 關(guān)于@Qualifier("beanName")用法

    關(guān)于@Qualifier("beanName")用法

    @Qualifier用于精確指定Bean,@Primary設(shè)為默認(rèn),兩者共存時(shí),@Qualifier優(yōu)先級(jí)更高,可靈活選擇具體實(shí)現(xiàn),解決依賴注入歧義,兼顧簡潔與可配置性
    2025-09-09
  • java構(gòu)造器 默認(rèn)構(gòu)造方法及參數(shù)化構(gòu)造方法

    java構(gòu)造器 默認(rèn)構(gòu)造方法及參數(shù)化構(gòu)造方法

    構(gòu)造器也叫構(gòu)造方法、構(gòu)造函數(shù),是一種特殊類型的方法,負(fù)責(zé)類中成員變量(域)的初始化。構(gòu)造器的用處是在創(chuàng)建對(duì)象時(shí)執(zhí)行初始化,當(dāng)創(chuàng)建一個(gè)對(duì)象時(shí),系統(tǒng)會(huì)為這個(gè)對(duì)象的實(shí)例進(jìn)行默認(rèn)的初始化,下面文章將進(jìn)入講解,需要的朋友可以參考下
    2021-10-10

最新評(píng)論

北川| 赤水市| 玛沁县| 新平| 洞口县| 甘南县| 沙雅县| 金乡县| 兴宁市| 林芝县| 当阳市| 天水市| 九江市| 清苑县| 密山市| 铁力市| 樟树市| 海口市| 修武县| 翁源县| 来宾市| 永州市| 泰和县| 高安市| 白山市| 镶黄旗| 石门县| 潞城市| 牡丹江市| 博白县| 顺昌县| 嘉义市| 通渭县| 施甸县| 南召县| 舟曲县| 儋州市| 林周县| 南宁市| 汉阴县| 莱西市|