日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring Boot2 整合 Ehcache

發布時間:2024/9/27 javascript 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Boot2 整合 Ehcache 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

用慣了 Redis ,很多人已經忘記了還有另一個緩存方案 Ehcache ,是的,在 Redis 一統江湖的時代,Ehcache 漸漸有點沒落了,不過,我們還是有必要了解下 Ehcache ,在有的場景下,我們還是會用到 Ehcache。

今天gblfy就來和大家聊聊 Spring Boot 中使用 Ehcache 的情況。相信看完本文,大家對于[Spring Boot 操作 Redis,三種方案全解析!]一文中的第二種方案會有更加深刻的理解。

Ehcache 也是 Java 領域比較優秀的緩存方案之一,Ehcache 這個緩存的名字很有意思,正著念反著念,都是 Ehcache,Spring Boot 中對此也提供了很好的支持,這個支持主要是通過 Spring Cache 來實現的。

Spring Cache 可以整合 Redis,當然也可以整合 Ehcache,兩種緩存方案的整合還是比較相似,主要是配置的差異,具體的用法是一模一樣的,就類似于 JDBC 和 數據庫驅動的關系一樣。前面配置完成后,后面具體使用的 API 都是一樣的。

和 Spring Cache + Redis 相比,Spring Cache + Ehcache 主要是配置有所差異,具體的用法是一模一樣的。我們來看下使用步驟。

項目創建
首先,來創建一個 Spring Boot 項目,引入 Cache 和web依賴:


工程創建完成后,引入 Ehcache 的依賴,Ehcache 目前有兩個版本:

這里采用第二個,在 pom.xml 文件中,引入 Ehcache 依賴:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId></dependency><dependency><groupId>net.sf.ehcache</groupId><artifactId>ehcache</artifactId><version>2.10.6</version></dependency>

添加 Ehcache 配置
在 resources 目錄下,添加 ehcache 的配置文件 ehcache.xml ,文件內容如下:

<ehcache><diskStore path="java.io.tmpdir/springboot-sample"/><!--diskStore:表示緩存持久化的文件夾下面定義的不同cache 節點屬于不同的緩存策略name:緩存名稱。maxElementsInMemory:緩存最大個數。eternal:對象是否永久有效,一但設置了,timeout將不起作用。timeToIdleSeconds:設置對象在失效前的允許閑置時間(單位:秒)。僅當eternal=false對象不是永久有效時使用,可選屬性,默認值是0,也就是可閑置時間無窮大。timeToLiveSeconds:設置對象在失效前允許存活時間(單位:秒)。最大時間介于創建時間和失效時間之間。僅當eternal=false對象不是永久有效時使用,默認是0.,也就是對象存活時間無窮大。overflowToDisk:當內存中對象數量達到maxElementsInMemory時,Ehcache將會對象寫到磁盤中。diskSpoolBufferSizeMB:這個參數設置DiskStore(磁盤緩存)的緩存區大小。默認是30MB。每個Cache都應該有自己的一個緩沖區。maxElementsOnDisk:硬盤最大緩存個數。diskPersistent:是否緩存虛擬機重啟期數據 Whether the disk store persists between restarts of the Virtual Machine. The default value is false.diskExpiryThreadIntervalSeconds:磁盤失效線程運行時間間隔,默認是120秒。memoryStoreEvictionPolicy:當達到maxElementsInMemory限制時,Ehcache將會根據指定的策略去清理內存。默認策略是LRU(最近最少使用)。你可以設置為FIFO(先進先出)或是LFU(較少使用)。clearOnFlush:內存數量最大時是否清除。--><defaultCachemaxElementsInMemory="10000"eternal="false"timeToIdleSeconds="120"timeToLiveSeconds="120"overflowToDisk="false"diskPersistent="false"diskExpiryThreadIntervalSeconds="120"/><cache name="user"maxElementsInMemory="10000"eternal="true"overflowToDisk="true"diskPersistent="true"diskExpiryThreadIntervalSeconds="600"/> </ehcache>

注意

默認情況下,這個文件名是固定的,必須叫 ehcache.xml ,如果一定要換一個名字,那么需要在 application.properties 中明確指定配置文件名,配置方式如下:

#spring.cache.ehcache.config=classpath:aaa.xml

開啟緩存
開啟緩存的方式,也和 Redis 中一樣,如下添加 @EnableCaching 依賴即可:

@SpringBootApplication @EnableCaching public class Springboot2EhcacheApplication {public static void main(String[] args) {SpringApplication.run(Springboot2EhcacheApplication.class, args);}}

其實到這一步,Ehcache 就算配置完成了,接下來的用法,和松哥之前講 Redis 的文章一模一樣。不過這里gblfy還是帶大家使用下。
這里主要向小伙伴們介紹緩存中幾個核心的注解使用。

@CacheConfig
這個注解在類上使用,用來描述該類中所有方法使用的緩存名稱,當然也可以不使用該注解,直接在具體的緩存注解上配置名稱,示例代碼如下:

@Service @CacheConfig(cacheNames = "user") public class HelloService {}

@Cacheable
這個注解一般加在查詢方法上,表示將一個方法的返回值緩存起來,默認情況下,緩存的 key 就是方法的參數,緩存的 value 就是方法的返回值。示例代碼如下:

@Cacheable(key = "#id")public User getUserById(long id, String name) {System.out.println("getUserById");return getUserFromDBById(id);}

當有多個參數時,默認就使用多個參數來做 key ,如果只需要其中某一個參數做 key ,則可以在 @Cacheable 注解中,通過 key 屬性來指定 key ,如上代碼就表示只使用 id 作為緩存的 key ,如果對 key 有復雜的要求,可以自定義 keyGenerator 。當然,Spring Cache 中提供了root對象,可以在不定義 keyGenerator 的情況下實現一些復雜的效果,root 對象有如下屬性:

也可以通過 keyGenerator 自定義 key ,方式如下:

@Component public class MyKeyGenerator implements KeyGenerator {@Overridepublic Object generate(Object target, Method method, Object... params) {return method.getName() + Arrays.toString(params);} }

然后在方法上使用該 keyGenerator

@Cacheable(keyGenerator = "myKeyGenerator")public User getUserById(Long id) {User user = new User().builder().id(id).name("gblfy").build();System.out.println(user);return user;}

@CachePut
這個注解一般加在更新方法上,當數據庫中的數據更新后,緩存中的數據也要跟著更新,使用該注解,可以將方法的返回值自動更新到已經存在的 key 上,示例代碼如下:

@CachePut(key = "user.id")public User updateUserById(User user){//這里寫更新操作return user;}

@CacheEvict
這個注解一般加在刪除方法上,當數據庫中的數據刪除后,相關的緩存數據也要自動清除,該注解在使用的時候也可以配置按照某種條件刪除( condition 屬性)或者或者配置清除所有緩存( allEntries 屬性),示例代碼如下:

@CacheEvict()public void deleteUserById(long id){// 在這里執行刪除操作,刪除就是去數據庫中刪除}

本文主要向大家了 Spring Boot 整合 Ehcache 的用法,其實說白了還是 Spring Cache 的用法。相信讀完本文,大家對于 Redis + Spring Cache 的用法會有更深的認識。

本文案例我已上傳到 碼云,歡迎大家 star:
https://gitee.com/gb_90/SpringBoot2_Practical_Column

總結

以上是生活随笔為你收集整理的Spring Boot2 整合 Ehcache的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。