偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

我們的項(xiàng)目引入本地緩存無冕之王—Caffeine

開發(fā) 項(xiàng)目管理
com.github.benmanes.caffeine.cache.Caffeine.Caffeine 是一個(gè)由Google開源的高性能Java本地緩存庫。它提供了靈活的配置選項(xiàng)和強(qiáng)大的緩存淘汰策略,旨在滿足現(xiàn)代應(yīng)用程序?qū)Φ脱舆t和高吞吐量的需求。

前言

大家好,我是田螺。

最近給我的知識星球手把手書城系統(tǒng),引入了Caffeine本地緩存??淳W(wǎng)上評價(jià),它居然被稱為本地緩存無冕之王,本文給大家簡單介紹一下它吧~~

  • Caffeine 是什么?
  • Caffeine的優(yōu)點(diǎn)與缺點(diǎn)
  • 實(shí)際業(yè)務(wù)的使用場景
  • 使用Caffeine需要注意的問題
  • Caffeine與Redis的區(qū)別及選擇
  • 代碼實(shí)踐實(shí)現(xiàn)

1. Caffeine 是什么?

com.github.benmanes.caffeine.cache.Caffeine.Caffeine 是一個(gè)由Google開源的高性能Java本地緩存庫。它提供了靈活的配置選項(xiàng)和強(qiáng)大的緩存淘汰策略,旨在滿足現(xiàn)代應(yīng)用程序?qū)Φ脱舆t和高吞吐量的需求。Caffeine通過精細(xì)的鎖優(yōu)化和無鎖數(shù)據(jù)結(jié)構(gòu),實(shí)現(xiàn)了極高的并發(fā)性能。

簡單一句話概括,就是Caffeine是具有高性能的Java本地緩存庫。

2. Caffeine的優(yōu)點(diǎn)與缺點(diǎn)

圖片

優(yōu)點(diǎn):

  • 高性能:使用基于 ConcurrentHashMap 的非阻塞算法,保證了并發(fā)情況下的高性能。
  • 靈活配置:支持多種緩存淘汰策略,如LRU、LFU等,并允許自定義緩存大小、過期時(shí)間等參數(shù)。
  • 豐富的統(tǒng)計(jì)信息:內(nèi)置統(tǒng)計(jì)功能,幫助開發(fā)者深入了解緩存的行為,從而進(jìn)行針對性的優(yōu)化。

缺點(diǎn):

  • 本地緩存限制:由于Caffeine是本地緩存,因此無法跨進(jìn)程共享數(shù)據(jù),這在分布式系統(tǒng)中可能是一個(gè)限制。
  • 僅適合短期緩存:不提供持久化機(jī)制,重啟后緩存會(huì)丟失。
  • 緩存大小限制:Caffeine 適用于本地緩存場景,緩存大小受制于 JVM 可用內(nèi)存。

3. 實(shí)際業(yè)務(wù)的使用場景

有哪些場景適合使用它呢?

系統(tǒng)需要頻繁查的,數(shù)據(jù)變化頻率較低。

比如:

  • 用戶信息緩存:將用戶的基本信息(如用戶名、角色、權(quán)限)緩存到本地。
  • 配置項(xiàng)緩存:存儲(chǔ)系統(tǒng)的靜態(tài)配置信息(如字典表、產(chǎn)品分類信息)。
  • 熱門內(nèi)容緩存:緩存熱門商品、推薦內(nèi)容或排行榜,避免頻繁從數(shù)據(jù)庫中讀取。

我們項(xiàng)目組,當(dāng)前實(shí)際開發(fā)的項(xiàng)目,產(chǎn)品配置參數(shù)表,就使用了本地緩存。

4. 使用Caffeine需要注意的問題

圖片

  • 緩存一致性:在分布式系統(tǒng)中,需要確保多個(gè)節(jié)點(diǎn)之間的緩存一致性。
  • 內(nèi)存管理:合理配置緩存大小和淘汰策略,避免內(nèi)存溢出和性能下降。同時(shí),定期監(jiān)控緩存使用情況,及時(shí)調(diào)整配置。
  • 緩存擊穿:對于某些熱點(diǎn)數(shù)據(jù),如果緩存失效且訪問量巨大,可能會(huì)導(dǎo)致數(shù)據(jù)庫壓力驟增。可以通過設(shè)置熱點(diǎn)數(shù)據(jù)的永不過期策略或使用互斥鎖來避免緩存擊穿。(如果只是單純用來做緩存配置表這些,則不用擔(dān)心這個(gè)問題)

5. Caffeine與Redis的區(qū)別及選擇

  • 存儲(chǔ)位置:Caffeine是本地緩存,存儲(chǔ)在JVM內(nèi)存中;而Redis是遠(yuǎn)程緩存,存儲(chǔ)在內(nèi)存中,但可以通過網(wǎng)絡(luò)訪問。
  • 性能:由于Caffeine是本地緩存,訪問速度更快,延遲更低;而Redis雖然性能也很高,但受限于網(wǎng)絡(luò)延遲。
  • 持久化:Redis支持?jǐn)?shù)據(jù)持久化,即使服務(wù)器重啟也能恢復(fù)數(shù)據(jù);而Caffeine是內(nèi)存緩存,數(shù)據(jù)在服務(wù)器重啟后會(huì)丟失。
  • 分布式:Redis是分布式緩存,支持多個(gè)節(jié)點(diǎn)之間的數(shù)據(jù)同步和共享;而Caffeine是本地緩存,無法跨進(jìn)程共享數(shù)據(jù)。

我們在哪些場景,選擇哪種緩存呢?

  • 對于需要高性能和低延遲的應(yīng)用:如果數(shù)據(jù)量不大且不需要持久化,可以選擇Caffeine作為本地緩存。
  • 對于需要跨進(jìn)程共享數(shù)據(jù)的應(yīng)用:如果數(shù)據(jù)量較大且需要持久化或跨進(jìn)程共享,可以選擇Redis作為遠(yuǎn)程緩存。

其實(shí),實(shí)際開發(fā)中,我們都是結(jié)合兩者一起使用的。

它兩還可以實(shí)現(xiàn)多級緩存策略。例如,將熱點(diǎn)數(shù)據(jù)緩存到Caffeine中,以提高訪問速度;將非熱點(diǎn)數(shù)據(jù)緩存到Redis中,以實(shí)現(xiàn)跨進(jìn)程共享和持久化。 這個(gè)合理嘛?熱點(diǎn)數(shù)據(jù)不可以放redis?

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

1)先引入maven包:

<!-- Spring Boot Starter Cache -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-cache</artifactId>
            </dependency>
            <!-- Caffeine Cache -->
            <dependency>
                <groupId>com.github.ben-manes.caffeine</groupId>
                <artifactId>caffeine</artifactId>
            </dependency>

2)實(shí)現(xiàn)CacheConfig緩存配置管理器

@Configuration
@EnableCaching
public class CacheConfig {

    @Bean
    public CacheManager cacheManager() {
        CaffeineCacheManager cacheManager = new CaffeineCacheManager("book");
        cacheManager.setCaffeine(caffeineCacheBuilder());
        return cacheManager;
    }
    
    Caffeine<Object, Object> caffeineCacheBuilder() {
        return Caffeine.newBuilder()
                .maximumSize(500) // 設(shè)置緩存的最大容量
                .expireAfterWrite(10, TimeUnit.MINUTES); // 設(shè)置寫入后過期時(shí)間
    }
}

3)在需要添加緩存的地方加個(gè)注解即可,很簡單

@Override
    @Cacheable("book")
    public BookVO queryBookById(Integer bookId) {
        BookPO bookPO = bookRepository.queryBookById(bookId);
        BookVO bookVO = new BookVO();
        BeanUtils.copyProperties(bookPO, bookVO);
        log.info("查詢書本:{}", bookId);
        return bookVO;
    }
責(zé)任編輯:武曉燕 來源: 撿田螺的小男孩
相關(guān)推薦

2011-07-20 09:50:18

2015-02-04 15:14:32

2025-03-26 03:25:00

SpringGuavaCaffeine

2021-11-04 08:04:49

緩存CaffeineSpringBoot

2011-07-25 13:59:25

IT技術(shù)周刊

2024-07-25 14:04:16

2021-07-11 18:06:18

緩存過期淘汰

2021-05-07 11:25:29

項(xiàng)目網(wǎng)關(guān)流量

2019-08-08 09:23:29

2023-08-26 13:45:22

2025-04-07 00:00:00

CaffeineJava數(shù)據(jù)存取

2024-12-03 14:38:07

CaffeineRedis二級緩存

2024-11-01 16:18:52

2022-03-31 13:58:37

分布式SpringRedis

2023-11-11 19:43:12

緩存數(shù)據(jù)庫

2024-04-24 10:24:09

2023-05-12 11:52:21

緩存場景性能

2025-01-20 00:15:00

2022-03-18 13:59:46

緩存RedisCaffeine

2024-01-03 21:50:32

緩存機(jī)制請求
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號