国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

輕松搞定Spring集成緩存,讓你的應(yīng)用程序飛起來!

這篇具有很好參考價值的文章主要介紹了輕松搞定Spring集成緩存,讓你的應(yīng)用程序飛起來!。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

輕松搞定Spring集成緩存,讓你的應(yīng)用程序飛起來!,# Spring,spring,緩存,java文章來源地址http://www.zghlxwxcb.cn/news/detail-723632.html

主頁傳送門:?? 傳送

??Spring 提供了對緩存的支持,允許你將數(shù)據(jù)存儲在緩存中以提高應(yīng)用程序的性能。Spring 緩存抽象基于 Java Caching API,但提供了更簡單的編程模型和更高級的功能。
??Spring 集成緩存提供了一種方便的方式來使用緩存,從而提高應(yīng)用程序的性能。Spring 緩存抽象提供了通用的緩存支持,并集成了常見的緩存解決方案。

緩存接口


??Spring 的緩存 API 以注解方式提供。Spring緩存接口定義主要由org.springframework.cache.Cache和org.springframework.cache.CacheManager兩個接口完成。

  • org.springframework.cache.Cache:這個接口代表一個緩存組件,Spring框架通過這個接口與緩存交互。它有幾個重要的方法:

    • String getName(): 返回緩存的名稱。
    • Object get(Object key, Class<?> type): 根據(jù)key獲取緩存數(shù)據(jù),如果數(shù)據(jù)不存在,返回null。
    • void put(Object key, Object value): 向緩存中添加數(shù)據(jù)。
    • void evict(Object key): 根據(jù)key移除緩存數(shù)據(jù)。
    • void clear(): 清空緩存。
  • org.springframework.cache.CacheManager:這個接口定義了如何獲取Cache實例。它有一個重要的方法:

    • Cache getCache(String name): 根據(jù)緩存的名稱獲取Cache實例。

??Spring通過這些接口與各種緩存實現(xiàn)(如EhCache,Redis,Hazelcast等)進(jìn)行交互。要使用Spring的緩存功能,只需配置一個實現(xiàn)了CacheManager接口的Bean,然后在需要使用緩存的地方使用@Cacheable,@CacheEvict和@CachePut等注解即可。

開啟注解


??Spring 為緩存功能提供了注解功能,但是你必須啟動注解:
(1) 在 xml 中聲明
??使用cache:annotation-driven/<cache:annotation-driven cache-manager=“cacheManager”/>
(2) 使用標(biāo)記注解
?? 通過對一個類進(jìn)行注解修飾的方式在這個類中使用緩存注解。

范例如下:

@Configuration
@EnableCaching
public class AppConfig {
}

緩存注解使用


??Spring 對緩存的支持類似于對事務(wù)的支持。 首先使用注解標(biāo)記方法,相當(dāng)于定義了切點,然后使用 Aop 技術(shù)在這個方法的調(diào)用前、調(diào)用后獲取方法的入?yún)⒑头祷刂担M(jìn)而實現(xiàn)了緩存的邏輯。

@Cacheable


??表明所修飾的方法是可以緩存的:當(dāng)?shù)谝淮握{(diào)用這個方法時,它的結(jié)果會被緩存下來,在緩存的有效時間內(nèi),以后訪問這個方法都直接返回緩存結(jié)果,不再執(zhí)行方法中的代碼段。 這個注解可以用condition屬性來設(shè)置條件,如果不滿足條件,就不使用緩存能力,直接執(zhí)行方法。 可以使用key屬性來指定 key 的生成規(guī)則。

范例如下:

@Service  
public class ExampleService {  
  
    @Cacheable("examples")  
    public String getExample(String key) {  
        // 模擬一個耗時操作  
        try {  
            Thread.sleep(1000);  
        } catch (InterruptedException e) {  
            e.printStackTrace();  
        }  
        return "Example for " + key;  
    }  
}

@CachePut


??與@Cacheable不同,@CachePut不僅會緩存方法的結(jié)果,還會執(zhí)行方法的代碼段。 當(dāng)一個方法被標(biāo)記為 @CachePut,Spring 會在該方法執(zhí)行后更新緩存。它支持的屬性和用法都與@Cacheable一致。

范例如下:

 @Service  
public class ExampleService {  
  
    @CachePut("examples")  
    public void updateExample(String key, String value) {  
        // 更新數(shù)據(jù)的操作  
        // ...  
    }  
}

@CacheEvict


??與@Cacheable功能相反,@CacheEvict表明所修飾的方法是用來刪除失效或無用的緩存數(shù)據(jù)。當(dāng)一個方法被標(biāo)記為 @CacheEvict,Spring 會在該方法執(zhí)行后從緩存中移除相關(guān)的數(shù)據(jù)。

范例如下:

@Service  
public class ExampleService {  
  
    @CacheEvict(value = "examples", key = "#id")  
    public void evictExample(String id) {  
        // 從緩存中移除數(shù)據(jù)的操作  
        // ...  
    }  
}

@Cacheable、@CacheEvict和@CachePut使用方法的集中展示示例:

@Service
public class UserService {
    // @Cacheable可以設(shè)置多個緩存,形式如:@Cacheable({"books", "isbns"})
    @Cacheable(value={"users"}, key="#user.id")
    public User findUser(User user) {
        return findUserInDB(user.getId());
    }

    @Cacheable(value = "users", condition = "#user.getId() <= 2")
    public User findUserInLimit(User user) {
        return findUserInDB(user.getId());
    }

    @CachePut(value = "users", key = "#user.getId()")
    public void updateUser(User user) {
        updateUserInDB(user);
    }

    @CacheEvict(value = "users")
    public void removeUser(User user) {
        removeUserInDB(user.getId());
    }

    @CacheEvict(value = "users", allEntries = true)
    public void clear() {
        removeAllInDB();
    }
}

@Caching


??如果需要使用同一個緩存注解(@Cacheable、@CacheEvict或@CachePut)多次修飾一個方法,就需要用到@Caching。

@Caching(evict = { @CacheEvict("primary"), @CacheEvict(cacheNames="secondary", key="#p0") })
public Book importBooks(String deposit, Date date)

@CacheConfig


??與前面的緩存注解不同,這是一個類級別的注解。 如果類的所有操作都是緩存操作,你可以使用@CacheConfig來指定類,省去一些配置。

@CacheConfig("books")
public class BookRepositoryImpl implements BookRepository {
	@Cacheable
	public Book findBook(ISBN isbn) {...}
}

緩存存儲


??Spring 允許通過配置方式接入多種不同的緩存存儲。用戶可以根據(jù)實際需要選擇。

不同的緩存存儲,具有不同的性能和特性。

使用 ConcurrentHashMap 作為緩存


示例配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:cache="http://www.springframework.org/schema/cache" xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
         http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd
         http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd">

  <description>使用 ConcurrentHashMap 作為 Spring 緩存</description>
    <context:component-scan base-package="io.github.dunwu.spring.cache"/>

  <bean id="simpleCacheManager" class="org.springframework.cache.support.SimpleCacheManager">
    <property name="caches">
      <set>
        <bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" p:name="default"/>
        <bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" p:name="users"/>
      </set>
    </property>
  </bean>

  <cache:annotation-driven cache-manager="simpleCacheManager"/>
</beans>

使用 Ehcache 作為緩存


示例配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:cache="http://www.springframework.org/schema/cache"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
         http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd
         http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd">

  <description>使用 EhCache 作為 Spring 緩存</description>

  <!--配置參考:https://docs.spring.io/spring/docs/current/spring-framework-reference/integration.html#cache-store-configuration-->

  <context:component-scan base-package="io.github.dunwu.spring.cache"/>

  <bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
    <property name="configLocation" value="classpath:ehcache/ehcache.xml"/>
  </bean>

  <bean id="ehcacheCacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
    <property name="cacheManager" ref="ehcache"/>
  </bean>

  <cache:annotation-driven cache-manager="ehcacheCacheManager"/>
</beans>

ehcache.xml 中的配置內(nèi)容完全符合 Ehcache 的官方配置標(biāo)準(zhǔn)。

使用 Caffeine 作為緩存


示例配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:cache="http://www.springframework.org/schema/cache"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
         http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd
         http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd">

  <description>使用 Caffeine 作為 Spring 緩存</description>

  <!--配置參考:https://docs.spring.io/spring/docs/current/spring-framework-reference/integration.html#cache-store-configuration-->

  <context:component-scan base-package="io.github.dunwu.spring.cache"/>

  <bean id="caffeineCacheManager" class="org.springframework.cache.caffeine.CaffeineCacheManager"/>

  <cache:annotation-driven cache-manager="caffeineCacheManager"/>
</beans>

參考資料

Spring 官方文檔

輕松搞定Spring集成緩存,讓你的應(yīng)用程序飛起來!,# Spring,spring,緩存,java

  如果喜歡的話,歡迎 ??關(guān)注 ??點贊 ??評論 ??收藏  ??一起討論
  你的支持就是我??創(chuàng)作的動力!					  ??????

到了這里,關(guān)于輕松搞定Spring集成緩存,讓你的應(yīng)用程序飛起來!的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 6種打包Python代碼的方法,讓你的程序變成exe應(yīng)用

    Python是一種高級編程語言,它具有易學(xué)易用、跨平臺等優(yōu)點,因此在開發(fā)中得到了廣泛的應(yīng)用。 然而,Python代碼需要在Python解釋器中運行,這對于一些用戶來說可能不太方便。 因此,將Python代碼打包成可執(zhí)行文件(exe)是一種很好的解決方案。 本文將介紹6種將Python代碼打包

    2024年01月18日
    瀏覽(21)
  • 6種打包Python代碼的方法,讓你的程序變成exe應(yīng)用!

    Python是一種高級編程語言,它具有易學(xué)易用、跨平臺等優(yōu)點,因此在開發(fā)中得到了廣泛的應(yīng)用。 然而,Python代碼需要在Python解釋器中運行,這對于一些用戶來說可能不太方便。 因此,將Python代碼打包成可執(zhí)行文件(exe)是一種很好的解決方案。 本文將介紹6種將Python代碼打包

    2024年02月16日
    瀏覽(18)
  • Vue實現(xiàn)二維碼,讓你的數(shù)據(jù)輕松傳遞

    在我們生活中,二維碼的應(yīng)用越來越廣泛,特別是在移動互聯(lián)網(wǎng)的時代,二維碼成為了快速傳達(dá)信息的一種利器。在這篇文章中,我們將會介紹如何在Vue框架下,實現(xiàn)一個具備掃描和查看數(shù)據(jù)的二維碼。 在這一篇文章中,我們將會使用到以下兩個庫: qrcode.js :一個簡單易用

    2024年02月05日
    瀏覽(21)
  • Python在生物信息學(xué)中的應(yīng)用:讓你的程序運行得更快

    程序運行太慢,想要提速,但不使用復(fù)雜的技術(shù)如 C 擴展或 JIT 編譯器。 解決方案 程序優(yōu)化的 第一準(zhǔn)則是“不要優(yōu)化” , 第二準(zhǔn)則是“不要優(yōu)化那些不重要的部分” ?;谶@兩個原則,如果你的程序運行得很慢,你得先找出影響性能的問題所在。 多數(shù)時候我們發(fā)現(xiàn)程序把

    2024年02月20日
    瀏覽(31)
  • 30個前端和設(shè)計必備網(wǎng)站,讓你的工作更輕松!

    30個前端和設(shè)計必備網(wǎng)站,讓你的工作更輕松!

    當(dāng)今互聯(lián)網(wǎng)時代,前端開發(fā)和設(shè)計領(lǐng)域變化迅速,每天都會有新技術(shù)和工具不斷涌現(xiàn)。無論你是一名前端工程師還是一名設(shè)計師,都需要不斷了解最新的前沿技術(shù)和工具。下面是30個前端和設(shè)計經(jīng)常會用到的網(wǎng)站,以及每個網(wǎng)站的功能介紹。 鏈接:https://www.w3schools.com/ W3Scho

    2024年01月16日
    瀏覽(94)
  • 在飛書上輕松集成ChatGPT,3步搞定!

    在飛書上輕松集成ChatGPT,3步搞定!

    為了讓用戶更便捷地使用 ChatGPT,我們將 ChatGPT 集成到飛書,設(shè)置只需要幾分鐘。 步驟一:獲取飛書 Webhook URL 在應(yīng)用商店或點擊飛書官網(wǎng)下載飛書。下載安裝后進(jìn)入飛書界面,點擊上方 ?號 創(chuàng)建一個群組。 輸入群名稱,例如: ChatGPT , 并點擊 創(chuàng)建 按鈕。在新建的群組界面

    2024年02月07日
    瀏覽(20)
  • 分享 7 個有用的 Flutter 庫,讓你的開發(fā)生活更輕松

    分享 7 個有用的 Flutter 庫,讓你的開發(fā)生活更輕松

    讓你的 Flutter 開發(fā)更高效 為什么要編寫自定義功能,當(dāng)你可以使用庫呢?庫是開發(fā)者最好的朋友和救命稻草。在我看來,一個好的項目應(yīng)該充分利用一些最好的可用庫。 本文是有關(guān) Flutter 中很棒的庫系列文章的一部分,我總結(jié)了7個 Flutter 庫,這些庫將有助于您在開發(fā)過程中

    2024年02月17日
    瀏覽(18)
  • 極速Python編程:利用緩存加速你的應(yīng)用程序

    在軟件開發(fā)中,緩存是一種常用的技術(shù),用于提高系統(tǒng)性能和響應(yīng)速度。Python提供了多種緩存技術(shù)和庫,使我們能夠輕松地實現(xiàn)緩存功能。本文將帶您從入門到精通,逐步介紹Python中的緩存使用方法,并提供實例演示。 緩存基礎(chǔ)知識 什么是緩存 緩存的工作原理 緩存的優(yōu)勢和

    2024年02月16日
    瀏覽(18)
  • 9 個實用的 VSCode 擴展插件,讓你的開發(fā)工作更輕松

    9 個實用的 VSCode 擴展插件,讓你的開發(fā)工作更輕松

    這些擴展將幫助您提高工作效率、改進(jìn)工作流程 VSCode 是幾乎所有編程語言中最受歡迎的 IDE 之一。它簡單、強大,有很多很酷的特性,而且是微軟的產(chǎn)品。所以對于任何開發(fā)人員來說,它都是一個很棒的工具。 通過安裝其市場上可用的各種免費擴展,可以自定義 VS Code 并使

    2023年04月20日
    瀏覽(34)
  • 多麗特膳:個性化的調(diào)減飲品,讓你的蛻變之路更輕松

    多麗特膳:個性化的調(diào)減飲品,讓你的蛻變之路更輕松

    不同的人有不同的體型和健康狀態(tài),在我們的生活中存在九種體質(zhì),它們分別是平和質(zhì)、氣虛質(zhì)、陽虛質(zhì)、陰虛質(zhì)、痰濕質(zhì)、濕熱質(zhì)、血瘀質(zhì)、氣郁質(zhì)、特稟質(zhì)。體質(zhì)是指人類個體在形態(tài)結(jié)構(gòu)和生理功能方面的相對穩(wěn)定的特征,它反映了人類個體之間的差異。這些體質(zhì)的不同

    2024年02月05日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包