摘要:是一個基于的緩存系統封裝,提供統一的和注解來簡化緩存的使用。提供了比更加強大的注解,可以原生的支持兩級緩存分布式自動刷新,還提供了接口用于手工緩存操作。緩存失效時間緩存的類型,包括。
之前一直在用Spring Cache進行接口數據的緩存,主要是Spring Cache在對具體key緩存失效時間的設置不是很方法,還要自己去擴展,無意中發現了阿里的JetCache。大部分的需求都能滿足,并且有一些很實用的功能,今天給大家介紹下。
JetCache是一個基于Java的緩存系統封裝,提供統一的API和注解來簡化緩存的使用。 JetCache提供了比SpringCache更加強大的注解,可以原生的支持TTL、兩級緩存、分布式自動刷新,還提供了Cache接口用于手工緩存操作。 當前有四個實現,RedisCache、TairCache(此部分未在github開源)、CaffeineCache(in memory)和一個簡易的LinkedHashMapCache(in memory),要添加新的實現也是非常簡單的。
GitHub:https://github.com/alibaba/je...
全部特性:通過統一的API訪問Cache系統
通過注解實現聲明式的方法緩存,支持TTL和兩級緩存
通過注解創建并配置Cache實例
針對所有Cache實例和方法緩存的自動統計
Key的生成策略和Value的序列化策略是可以配置的
分布式緩存自動刷新,分布式鎖 (2.2+)
異步Cache API (2.2+,使用Redis的lettuce客戶端時)
Spring Boot支持
體驗一下增加Maven配置:
com.alicp.jetcache jetcache-starter-redis 2.5.11
配置內容:
# 采用Java序列化存儲 jetcache.remote.default.valueDecoder = java # Key的轉換器 jetcache.remote.default.keyConvertor = fastjson # 是否加入緩存key前綴 jetcache.areaInCacheName = false jetcache.remote.default.valueEncoder = java # 緩存類型。tair、redis為當前支持的遠程緩存;linkedhashmap、caffeine為當前支持的本地緩存類型 jetcache.local.default.type = linkedhashmap # 控制臺輸出統計數據,統計間隔,0表示不統計 jetcache.statIntervalMinutes = 15 jetcache.local.default.keyConvertor = fastjson jetcache.remote.default.uri = redis://192.168.0.210:6379/
remote 表示遠程緩存
local表示本地緩存
啟動類開啟緩存:
@SpringBootApplication @EnableMethodCache(basePackages = "com.cxytiandi.jetcache") @EnableCreateCacheAnnotation public class App { public static void main(String[] args) { SpringApplication.run(App.class); } }
@EnableMethodCache
用于激活@Cached注解的使用
@EnableCreateCacheAnnotation
用于激活@CreateCache注解的使用
定義一個簡單的實體類來作為數據的緩存,必須實現Serializable接口。
@Data public class User implements Serializable { private Long id; private String name; }
@CreateCache使用
@CreateCache(expire = 100) private CacheuserCache; User user = new User(); user.setId(1L); user.setName("yinjihuan"); // 新增緩存 userCache.put(1L, user); // 刪除緩存 userCache.remove(1L);
用起來很簡單,就像操作本地Map一樣,@CreateCache中有很多配置需要我們自己去指定,不指定則使用默認的,關于配置請查看文檔:https://github.com/alibaba/jetcache/wiki/CreateCache_CN
@Cached使用
@Cached(name="getUser.", key="#id", expire = 8, cacheType=CacheType.BOTH) @Override public User getUser(Long id) { User user = new User(); user.setId(1L); user.setName("yinjihuan"); return user; }
name
緩存名稱
key
緩存key,追加到name后面構成唯一的緩存key, 使用SpEL指定key,如果沒有指定會根據所有參數自動生成。
expire
緩存失效時間
cacheType
緩存的類型,包括CacheType.REMOTE、CacheType.LOCAL、CacheType.BOTH。如果定義為BOTH,會使用LOCAL和REMOTE組合成兩級緩存
更多配置的介紹請查看文檔:https://github.com/alibaba/jetcache/wiki/MethodCache_CN
今天的介紹就到這里,使用起來還是很方便的,關于更多的功能大家自行去嘗試吧,比如緩存定時刷新,緩存命中率統計,自定義序列化方式等等。
整合Apollo的坑
在這邊提一個容易被坑到的點,如果你們的配置都是在Apollo中進行管理的話,那么在集成的時候會有個問題,需要在項目中加上下面的配置才行,其余的配置可以放Apollo中。
spring.application.name=district-service app.id=${spring.application.name} apollo.bootstrap.enabled=true // 這是你要加的,指定緩存類型,我這邊用的是lettuce jetcache.remote.default.type=redis.lettuce
@Cached定義在接口上的坑
還有一個呢就是@Cached如果定義在接口上就不能指定key屬性,框架中會自動根據參數生成key, 如果非得自己用SPEL表達式指定key的話,項目編譯設置target必須為1.8格式,并且指定javac的-parameters參數,否則就要使用key="args[0]"這樣按下標訪問的形式。我建議還是把@Cached的定義放在實現類上,也方便修改。
我這邊也錄制了一套視頻,感興趣的可以去了解下:http://cxytiandi.com/course/24
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/74083.html
摘要:是由阿里巴巴開源的通用緩存訪問框架,如果你對很熟悉的話,請一定花一點時間了解一下,它更好用。有了,我們就可以更方便的基于統一的接口訪問緩存。 JetCache是由阿里巴巴開源的通用緩存訪問框架,如果你對Spring Cache很熟悉的話,請一定花一點時間了解一下JetCache,它更好用。 JetCache提供的核心能力包括: 提供統一的,類似jsr-107風格的API訪問Cache...
摘要:淘寶定制基于,是國內第一個優化定制且開源的服務器版虛擬機。數據庫開源數據庫是基于官方版本的一個分支,由阿里云數據庫團隊維護,目前也應用于阿里巴巴集團業務以及阿里云數據庫服務。淘寶服務器是由淘寶網發起的服務器項目。 Java JAVA 研發框架 SOFAStack SOFAStack(Scalable Open Financial Architecture Stack)是用于快速構建金融...
閱讀 2005·2023-04-25 16:53
閱讀 1446·2021-10-13 09:39
閱讀 611·2021-09-08 09:35
閱讀 1646·2019-08-30 13:03
閱讀 2126·2019-08-30 11:06
閱讀 1835·2019-08-30 10:59
閱讀 3194·2019-08-29 17:00
閱讀 2293·2019-08-23 17:55