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

Spring?Boot?緩存?與?Redis問題小結(jié)

 更新時間:2025年07月21日 09:56:30   作者:黃名富  
本文總結(jié)SpringBoot緩存方案,對比Redis與EnCache優(yōu)劣,指出Redis支持集群但效率較低,EnCache速度快但不支持分布式,SpringBoot默認(rèn)使用ConcurrentHashMapManager,本文給大家介紹Spring?Boot緩存與Redis問題小結(jié),感興趣的朋友一起看看吧

緩存是提升接口響應(yīng)速度和降低數(shù)據(jù)庫壓力的重要手段。

Redis

通過Socket訪問到緩存服務(wù),效率比EnCache低,對集群和分布式支持友好。

EnCache

純Java的進(jìn)程緩存,直接在JVM中進(jìn)行緩存,速度快、效率高,但對分布式集群的支持不太好。

ConcurrentHashMap

Manager

Spring Boot 默認(rèn)提供的緩存管理器,線程安全,官方明確不建議在生產(chǎn)環(huán)境使用。

表 Java緩存方案對比

1 緩存注解

Spring Boot 提供了緩存抽象層,并結(jié)合JSR-107標(biāo)準(zhǔn),提供了多個緩存注解。

@Cacheable

查詢緩存。

@CachePut

更新緩存。

@CacheEvict

刪除緩存。

表 常用的緩存注解

這些注解作用于方法級別,在不侵入業(yè)務(wù)邏輯的前提下,實現(xiàn)緩存管理。它們是基于AOP實現(xiàn)的,有以下注意項:

  1. 只能用于public方法上。
  2. 只有當(dāng)調(diào)用方通過Spring代理調(diào)用該方法時才生效。(同一個類中直接調(diào)用不生效)
  3. 需要啟用緩存功能。@EnableCaching。

1.1 緩存key 生成策略

緩存注解keyGenerator字段用于指定該方法緩存key的生成策略。

圖 key 生成策略需實現(xiàn)的接口

    @Bean
    public KeyGenerator paramsKeyGenerator() {
        return ((target, method, params) -> {
           StringBuilder sb = new StringBuilder();
           sb.append(target.getClass().getSimpleName());
           sb.append("::");
           sb.append(method.getName());
           for (Object obj : params) {
               sb.append("::");
               sb.append(obj.toString());
           }
           return sb.toString();
        });
    }

2 Redis 緩存策略

maven依賴:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

緩存策略配置:

@Configuration
@EnableCaching
public class CacheConfig {
    @Bean
    public CacheManager cacheManager(RedisConnectionFactory factory) {
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
                .entryTtl(Duration.ofMinutes(30))
                .disableCachingNullValues() // 避免緩存穿透
                .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));
        return RedisCacheManager.builder(factory)
                .cacheDefaults(config)
                .build();
    }
}

2.1 redis 連接池

Spring Boot 2.x 默認(rèn)使用Lettuce作為Redis客戶端。

Lettuce

基于Netty的異步非阻塞通信;原生線程安全;長連接Lettuce性能優(yōu)勢更明顯;CPU利用率更高效。

Jedis

同步阻塞通信;非線程安全;

表 Lettuce 與 Jedis對比

2.2 Redis 緩存問題

1 緩存穿透:查詢一個根本不存在的數(shù)據(jù),導(dǎo)致每次查詢都會訪問數(shù)據(jù)庫。

使用布隆過濾器(檢索元素是否存在集合中)。它內(nèi)存占用小。判斷元素存在有誤差,但是判斷元素不存在絕對準(zhǔn)確。

2 緩存擊穿:某個熱點key突然實現(xiàn),大量請求同時訪問時,會擊穿緩存直接訪問數(shù)據(jù)庫。

使用互斥鎖或邏輯過期。也可以設(shè)置熱點key永不過期或是后臺刷新熱點key緩存。

3 緩存雪崩:大量緩存key同時失效,大量請求直接訪問數(shù)據(jù)庫。發(fā)生場景有:1)緩存服務(wù)器重啟;2)大量緩存設(shè)置相同過期時間。

緩存key的過期時間隨機化。

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

相關(guān)文章

  • 解決redis錯誤消息:BUSYKEY Target key name already exists.問題

    解決redis錯誤消息:BUSYKEY Target key name alre

    這篇文章主要介紹了解決redis錯誤消息:BUSYKEY Target key name already exists.問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • Redis分片集群的實現(xiàn)方法

    Redis分片集群的實現(xiàn)方法

    Redis Cluster是Redis官方提供的分布式解決方案,它不是像哨兵那樣只負(fù)責(zé)高可用切換,而是同時解決了數(shù)據(jù)分片和高可用兩個問題,感興趣的可以了解一下
    2025-08-08
  • Redis和Memcached的區(qū)別詳解

    Redis和Memcached的區(qū)別詳解

    這篇文章主要介紹了Redis和Memcached的區(qū)別詳解,本文從各方面總結(jié)了兩個數(shù)據(jù)庫的不同之處,需要的朋友可以參考下
    2015-03-03
  • redis中5種數(shù)據(jù)基礎(chǔ)查詢命令

    redis中5種數(shù)據(jù)基礎(chǔ)查詢命令

    本文主要介紹了redis中5種數(shù)據(jù)基礎(chǔ)查詢命令,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • redis三種高可用方式部署的實現(xiàn)

    redis三種高可用方式部署的實現(xiàn)

    這篇文章主要介紹了redis三種高可用方式部署的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • Redis中什么是Big?Key(大key)問題?如何解決Big?Key問題?

    Redis中什么是Big?Key(大key)問題?如何解決Big?Key問題?

    大key并不是指key的值很大,而是key對應(yīng)的value很大,下面這篇文章主要給大家介紹了Redis中什么是Big?Key(大key)問題?如何解決Big?Key問題的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • 基于Redis實現(xiàn)短信驗證碼登錄項目示例(附源碼)

    基于Redis實現(xiàn)短信驗證碼登錄項目示例(附源碼)

    手機登錄驗證在很多網(wǎng)頁上都得到使用,本文主要介紹了基于Redis實現(xiàn)短信驗證碼登錄項目示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • Redis入門教程詳解

    Redis入門教程詳解

    本文詳細(xì)介紹了Redis,文中主要講解了其基本數(shù)據(jù)結(jié)構(gòu)、高級數(shù)據(jù)結(jié)構(gòu)、高級特性、使用場景等,需要了解的朋友可以參考一下
    2021-08-08
  • Linux快速部署Redis

    Linux快速部署Redis

    這篇文章介紹了Linux下快速部署Redis的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01
  • Redis分布式限流組件設(shè)計與使用實例

    Redis分布式限流組件設(shè)計與使用實例

    本文主要講解基于 自定義注解+Aop+反射+Redis+Lua表達(dá)式 實現(xiàn)的限流設(shè)計方案。實現(xiàn)的限流設(shè)計與實際使用。具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08

最新評論

会东县| 沙河市| 仲巴县| 叶城县| 明星| 西安市| 东台市| 北宁市| 宜兰市| 武山县| 锡林浩特市| 甘孜| 曲水县| 华容县| 宣恩县| 静安区| 梁河县| 屯留县| 呼玛县| 淳化县| 琼结县| 南京市| 沅江市| 沧州市| 横峰县| 扶风县| 阳高县| 长汀县| 太白县| 合水县| 临江市| 宁都县| 东莞市| 普陀区| 高唐县| 元朗区| 霍林郭勒市| 清水河县| 封开县| 藁城市| 彰化县|