色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于java開發(fā)的緩存框架jetcache簡(jiǎn)介

馬哥Linux運(yùn)維 ? 來(lái)源:稀土掘金技術(shù)社區(qū) ? 2023-09-07 10:36 ? 次閱讀

0. 引言

在實(shí)際應(yīng)用中,并不是單一的使用本地緩存或者redis,更多是組合使用來(lái)滿足不同的業(yè)務(wù)場(chǎng)景,于是如何優(yōu)雅的組合本地緩存和遠(yuǎn)程緩存就成了我們要研究的問題,而這一點(diǎn),阿里開源的jetcache組件幫我們實(shí)現(xiàn)了

1. jetcache簡(jiǎn)介

jetcache是阿里開源的基于java開發(fā)的緩存框架,支持多種緩存類型:本地緩存、分布式緩存、多級(jí)緩存。能夠滿足不同業(yè)務(wù)場(chǎng)景的緩存需求。

jetcache具有上手簡(jiǎn)單、性能高效、拓展性強(qiáng)的特點(diǎn)。支持緩存預(yù)熱 、緩存key前綴等功能。結(jié)合spring-cache使用,可以實(shí)現(xiàn)十分優(yōu)雅的緩存類型切換

2. jetcache使用

1、引入依賴,這里我們使用sringboot項(xiàng)目框架,同時(shí)使用redis作為遠(yuǎn)程緩存。于是我們引入jetcache-starter-redis依賴,這里我的springboot版本為2.6.13

如果是非springboot項(xiàng)目可以參考官網(wǎng)說(shuō)明配置

8f7e9880-4cb5-11ee-a25d-92fbcf53809c.png


com.alicp.jetcache
jetcache-starter-redis
2.7.0


 

redis.clients
jedis
4.3.1

對(duì)應(yīng)的版本說(shuō)明如下:springboot與jetcache版本關(guān)系

8fa17d64-4cb5-11ee-a25d-92fbcf53809c.png

2、修改配置文件,配置redis地址和線程數(shù)

jetcache:
#統(tǒng)計(jì)間隔,0表示不統(tǒng)計(jì),開啟后定期在控制臺(tái)輸出緩存信息
statIntervalMinutes:15
#是否把cacheName作為遠(yuǎn)程緩存key前綴
areaInCacheName:false
#本地緩存配置
local:
default:#default表示全部生效,也可以指定某個(gè)cacheName
#本地緩存類型,其他可選:caffeine/linkedhashmap
type:linkedhashmap
keyConvertor:fastjson
#遠(yuǎn)程緩存配置
remote:
default:#default表示全部生效,也可以指定某個(gè)cacheName
type:redis
#key轉(zhuǎn)換器方式n
keyConvertor:fastjson
broadcastChannel:projectA
#redis序列化方式
valueEncoder:java
valueDecoder:java
#redis線程池
poolConfig:
minIdle:5
maxIdle:20
maxTotal:50
#redis地址與端口
host:127.0.0.1
port:6379

更詳細(xì)的參數(shù)配置

8fb5b57c-4cb5-11ee-a25d-92fbcf53809c.png

3、啟動(dòng)類添加注解@EnableCreateCacheAnnotation,開啟緩存,添加@EnableMethodCache(basePackages = "com.example.jetcachedemo")注解,配置緩存方法掃描路徑

4、使用緩存可以通過三種方式:

方式一(推薦)AOP模式:通過@Cached,@CacheUpdate,@CacheInvalidate注解

@RestController
@RequestMapping("user")
publicclassUserController{

@GetMapping("getRemote")
@Cached(name="userCache:",key="#id",expire=3600,timeUnit=TimeUnit.SECONDS,cacheType=CacheType.REMOTE)
publicUsergetRemote(Longid){
//直接新建用戶,模擬從數(shù)據(jù)庫(kù)獲取數(shù)據(jù)
Useruser=newUser();
user.setId(id);
user.setName("用戶remote"+id);
user.setAge(23);
user.setSex(1);
System.out.println("第一次獲取數(shù)據(jù),未走緩存:"+id);
returnuser;
}

@GetMapping("getLocal")
@Cached(name="userCache:",key="#id",expire=3600,timeUnit=TimeUnit.SECONDS,cacheType=CacheType.LOCAL)
publicUsergetLocal(Longid){
//直接新建用戶,模擬從數(shù)據(jù)庫(kù)獲取數(shù)據(jù)
Useruser=newUser();
user.setId(id);
user.setName("用戶local"+id);
user.setAge(23);
user.setSex(1);
System.out.println("第一次獲取數(shù)據(jù),未走緩存:"+id);
returnuser;
}

@GetMapping("getBoth")
@Cached(name="userCache:",key="#id",expire=3600,timeUnit=TimeUnit.SECONDS,cacheType=CacheType.BOTH)
publicUsergetBoth(Longid){
//直接新建用戶,模擬從數(shù)據(jù)庫(kù)獲取數(shù)據(jù)
Useruser=newUser();
user.setId(id);
user.setName("用戶both"+id);
user.setAge(23);
user.setSex(1);
System.out.println("第一次獲取數(shù)據(jù),未走緩存:"+id);
returnuser;
}

@PostMapping("updateUser")
@CacheUpdate(name="userCache:",key="#user.id",value="#user")
publicBooleanupdateUser(@RequestBodyUseruser){
//TODO更新數(shù)據(jù)庫(kù)
returntrue;
}

@PostMapping("deleteUser")
@CacheInvalidate(name="userCache:",key="#id")
publicBooleandeleteUser(Longid){
//TODO從數(shù)據(jù)庫(kù)刪除
returntrue;
}

}

這里要注意實(shí)體類User一定要實(shí)現(xiàn)序列化,即聲明Serializable

@Data
publicclassUserimplementsSerializable{

privateLongid;
privateStringname;
privateIntegerage;
privateIntegersex;
}

方式二 API模式:通過@CreateCache,注:在jetcache 2.7 版本CreateCache注解已廢棄,不推薦使用

@RestController
@RequestMapping("user2")
publicclassUser2Controller{

@CreateCache(name="userCache:",expire=3600,timeUnit=TimeUnit.SECONDS,cacheType=CacheType.BOTH)
privateCacheuserCache;

@GetMapping("get")
publicUserget(Longid){
if(userCache.get(id)!=null){
return(User)userCache.get(id);
}
Useruser=newUser();
user.setId(id);
user.setName("用戶both"+id);
user.setAge(23);
user.setSex(1);
userCache.put(id,user);
System.out.println("第一次獲取數(shù)據(jù),未走緩存:"+id);
returnuser;
}

@PostMapping("updateUser")
publicBooleanupdateUser(@RequestBodyUseruser){
//TODO更新數(shù)據(jù)庫(kù)
userCache.put(user.getId(),user);
returntrue;
}

@PostMapping("deleteUser")
publicBooleandeleteUser(Longid){
//TODO從數(shù)據(jù)庫(kù)刪除
userCache.remove(id);
returntrue;
}

}

方式三 高級(jí)API模式:通過CacheManager,2.7 版本才可使用

(1)添加依賴


com.alibaba
fastjson
2.0.25

(2)書寫配置類

@Configuration
publicclassJetcacheConfig{

@Autowired
privateCacheManagercacheManager;
privateCacheuserCache;

@PostConstruct
publicvoidinit(){
QuickConfigqc=QuickConfig.newBuilder("userCache:")
.expire(Duration.ofSeconds(3600))
.cacheType(CacheType.BOTH)
//本地緩存更新后,將在所有的節(jié)點(diǎn)中刪除緩存,以保持強(qiáng)一致性
.syncLocal(false)
.build();
userCache=cacheManager.getOrCreateCache(qc);
}

@Bean
publicCachegetUserCache(){
returnuserCache;
}
}

(3)調(diào)用代碼

@RestController
@RequestMapping("user3")
publicclassUser3Controller{

@Autowired
JetcacheConfigjetcacheConfig;
@Autowired
privateCacheuserCache;

@GetMapping("get")
publicUserget(Longid){
if(userCache.get(id)!=null){
return(User)userCache.get(id);
}
Useruser=newUser();
user.setId(id);
user.setName("用戶both"+id);
user.setAge(23);
user.setSex(1);
userCache.put(id,user);
System.out.println("第一次獲取數(shù)據(jù),未走緩存:"+id);
returnuser;
}

@PostMapping("updateUser")
publicBooleanupdateUser(@RequestBodyUseruser){
//TODO更新數(shù)據(jù)庫(kù)
userCache.put(user.getId(),user);
returntrue;
}

@PostMapping("deleteUser")
publicBooleandeleteUser(Longid){
//TODO從數(shù)據(jù)庫(kù)刪除
userCache.remove(id);
returntrue;
}

}

多級(jí)緩存的形式,會(huì)先從本地緩存獲取數(shù)據(jù),本地獲取不到會(huì)從遠(yuǎn)程緩存獲取

5、啟動(dòng)redis,啟動(dòng)演示項(xiàng)目

注意,如果啟動(dòng)出現(xiàn)NoClassDefFoundError: redis/clients/util/Pool或NoClassDefFoundError: redis/clients/jedis/UnifiedJedis報(bào)錯(cuò),說(shuō)明springboot與jetcache版本不一致,對(duì)應(yīng)關(guān)系可參考上述第一步中的說(shuō)明 同時(shí)如果使用的是jetcache2.7.x版本,因?yàn)樵摪姹局杏衘edis包的依賴,需要額外添加如下依賴,或者將jetcache版本將至2.6.5以下


redis.clients
jedis
4.3.1

3. 測(cè)試

3.1 方式一測(cè)試

1、訪問localhost:8088/user/getRemote?id=1

8ff5ed0e-4cb5-11ee-a25d-92fbcf53809c.png

因?yàn)榕渲玫氖沁h(yuǎn)程緩存,在redis中也能看到對(duì)應(yīng)的key

902b0dd6-4cb5-11ee-a25d-92fbcf53809c.png

2、訪問localhost:8088/user/getLocal?id=1,這個(gè)方法是從本地緩存獲取的,現(xiàn)在只有遠(yuǎn)程緩存上有數(shù)據(jù),我們調(diào)用發(fā)現(xiàn)緩存數(shù)據(jù)還是拿到了,這說(shuō)明當(dāng)我們?cè)谂渲梦募信渲昧吮镜鼐彺婧瓦h(yuǎn)程緩存后,方式一中本地緩存和遠(yuǎn)程緩存會(huì)自動(dòng)相互調(diào)用

比如本地緩存有這個(gè)key,redis中沒有,通過遠(yuǎn)程緩存方式訪問時(shí),會(huì)先從redis獲取,如果沒有會(huì)自動(dòng)獲取本地緩存,但是數(shù)據(jù)還是存儲(chǔ)在本地緩存,并不會(huì)同步到redis上,這樣更加靈活的實(shí)現(xiàn)了多級(jí)緩存架構(gòu)

904d52ce-4cb5-11ee-a25d-92fbcf53809c.png

3.2 方式二測(cè)試

1、再測(cè)試下CreateCache的形式:localhost:8088/user2/get?id=4

9080d630-4cb5-11ee-a25d-92fbcf53809c.png

正常獲取了,并且redis中也有了對(duì)應(yīng)的值

90bbb124-4cb5-11ee-a25d-92fbcf53809c.png

而當(dāng)我們把緩存方式更改為L(zhǎng)OCAL后,再訪問localhost:8088/user2/get?id=5

@CreateCache(name="userCache:",expire=3600,timeUnit=TimeUnit.SECONDS,cacheType=CacheType.LOCAL)

會(huì)發(fā)現(xiàn)redis中就沒有對(duì)應(yīng)緩存了,只在本地緩存存在,說(shuō)明我們指定本地緩存的形式成功了

90d745e2-4cb5-11ee-a25d-92fbcf53809c.png

3.3 方式三測(cè)試

1、調(diào)用localhost:8088/user3/get?id=11

90f0f37a-4cb5-11ee-a25d-92fbcf53809c.png

redis中緩存設(shè)置成功!

9105ecda-4cb5-11ee-a25d-92fbcf53809c.png

4. 常見報(bào)錯(cuò)

1、 ClassNotFoundException: com.alibaba.fastjson.JSON 解決:添加依賴


com.alibaba
fastjson
2.0.25

2、NoClassDefFoundError: redis/clients/jedis/UnifiedJedis 解決: 添加依賴


redis.clients
jedis
4.3.1

或者將jetcache版本降低至2.6.5以下

演示源碼

https://gitee.com/wuhanxue/wu_study/tree/master/demo/jetcache-demo

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2966

    瀏覽量

    104702
  • 緩存
    +關(guān)注

    關(guān)注

    1

    文章

    239

    瀏覽量

    26671
  • 開源
    +關(guān)注

    關(guān)注

    3

    文章

    3309

    瀏覽量

    42471
  • spring
    +關(guān)注

    關(guān)注

    0

    文章

    340

    瀏覽量

    14338
  • Redis
    +關(guān)注

    關(guān)注

    0

    文章

    374

    瀏覽量

    10871

原文標(biāo)題:jetcache:阿里這款多級(jí)緩存框架一定要掌握

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    java框架學(xué)習(xí)-Webwork2開發(fā)

    提供易于理解和維護(hù)的工具及開發(fā)框架,現(xiàn)在把我們java私塾做企業(yè)培訓(xùn)和日常教學(xué)用的webwork的資料共享出來(lái),大家一起學(xué)習(xí)。第一部分 Webwork2簡(jiǎn)介WebWork是由OpenS
    發(fā)表于 09-29 14:15

    【南京】誠(chéng)聘JAVA開發(fā)工程師

    獵頭推薦職位:JAVA開發(fā)工程師工作職責(zé):1. 了解互聯(lián)網(wǎng)的技術(shù)發(fā)展、評(píng)估外部技術(shù)與解決方案;2. 能對(duì)系統(tǒng)進(jìn)行性能優(yōu)化,保證系統(tǒng)穩(wěn)定、快速、安全運(yùn)行;3. 能獨(dú)自設(shè)計(jì)核心模塊并完成代碼編寫
    發(fā)表于 07-05 14:45

    英創(chuàng)主板JAVA應(yīng)用開發(fā)簡(jiǎn)介

    遇到問題,請(qǐng)參閱下載文檔:《英創(chuàng)主板JAVA應(yīng)用開發(fā)簡(jiǎn)介》中的“7、常見問題Q&A”。如果不能解決問題,請(qǐng)通過電話或者郵件聯(lián)系我們。
    發(fā)表于 10-20 13:13

    java開源工具包-Jodd框架

    Jodd是一個(gè)Java工具包和微型框架,Jodd 工具包含一些實(shí)用的工具類和小型框架,增強(qiáng)了 JDK 提供很多強(qiáng)大的功能,可以幫助實(shí)現(xiàn)日常的開發(fā)任務(wù),讓代碼更可靠;而Jodd
    發(fā)表于 03-19 16:13

    阿里巴巴開源的通用緩存訪問框架JetCache介紹

    摘要: JetCache是由阿里巴巴開源的通用緩存訪問框架,如果你對(duì)Spring Cache很熟悉的話,請(qǐng)一定花一點(diǎn)時(shí)間了解一下JetCache,它更好用。
    發(fā)表于 04-24 16:09

    JS應(yīng)用開發(fā)框架組件

    JS應(yīng)用開發(fā)框架組件簡(jiǎn)介目錄接口使用相關(guān)倉(cāng)簡(jiǎn)介JS應(yīng)用開發(fā)框架,是OpenHarmony為
    發(fā)表于 04-23 18:05

    鴻蒙應(yīng)用開發(fā)的JS UI框架如何實(shí)現(xiàn)高德地圖的訪問?

    鴻蒙應(yīng)用,現(xiàn)在分為Java UI框架和Ark UI框架,其中JS UI開發(fā)框架Ark UI框架
    發(fā)表于 04-28 11:44

    基于AOP的智能Web緩存框架

    通過引入面向方面編程技術(shù),提出一種新的智能Web緩存框架。描述該框架的組成結(jié)構(gòu)與工作原理,對(duì)緩存設(shè)計(jì)時(shí)需要解決的透明性、一致性、替換算法和預(yù)取策略等主要問題進(jìn)行討
    發(fā)表于 04-11 09:04 ?4次下載

    Java 使用Redis緩存工具的詳細(xì)解說(shuō)

    本文是關(guān)于Java 使用Redis緩存工具的詳細(xì)解說(shuō)。詳細(xì)步驟請(qǐng)看下文
    的頭像 發(fā)表于 02-09 14:10 ?7878次閱讀
    <b class='flag-5'>Java</b> 使用Redis<b class='flag-5'>緩存</b>工具的詳細(xì)解說(shuō)

    Java Web的開發(fā)前奏詳細(xì)資料免費(fèi)下載

    本文檔的詳細(xì)介紹的是Java Web的開發(fā)前奏詳細(xì)資料免費(fèi)下載主要內(nèi)容包括了:1、Java Web開發(fā)簡(jiǎn)介,2、HTML、JavaScrip
    發(fā)表于 02-21 10:37 ?18次下載
    <b class='flag-5'>Java</b> Web的<b class='flag-5'>開發(fā)</b>前奏詳細(xì)資料免費(fèi)下載

    基于Java的接口快速開發(fā)框架

    作者丨編碼磚家 來(lái)源丨h(huán)ttp://adkx.net/w5m4s Part1簡(jiǎn)介 magic-api 是一個(gè)基于Java的接口快速開發(fā)框架,編寫接口將通過magic-api提供的UI界
    的頭像 發(fā)表于 09-10 09:36 ?3715次閱讀

    基于Java的接口快速開發(fā)框架——magic-api

    magic-api 是一個(gè)基于Java的接口快速開發(fā)框架,編寫接口將通過magic-api提供的UI界面完成,自動(dòng)映射為HTTP接口,無(wú)需定義Controller、Service、Dao、Mapper、XML、VO等
    發(fā)表于 07-19 11:42 ?906次閱讀
    基于<b class='flag-5'>Java</b>的接口快速<b class='flag-5'>開發(fā)</b><b class='flag-5'>框架</b>——magic-api

    Ehcache!這才是Java本地緩存之王!

    Java而言,其常用的緩存解決方案有很多,例如數(shù)據(jù)庫(kù)緩存框架EhCache,分布式緩存Memcached等,這些
    的頭像 發(fā)表于 07-29 11:21 ?1779次閱讀
    Ehcache!這才是<b class='flag-5'>Java</b>本地<b class='flag-5'>緩存</b>之王!

    基于springboot和vue框架Java

    本文將詳細(xì)介紹基于Spring Boot和Vue框架進(jìn)行Java應(yīng)用開發(fā)的實(shí)踐。首先,將介紹Spring Boot和Vue框架的基本概念及其優(yōu)點(diǎn)。然后,將詳細(xì)介紹如何搭建Spring
    的頭像 發(fā)表于 12-03 15:15 ?1020次閱讀

    SSM框架Java開發(fā)中的應(yīng)用 如何使用SSM進(jìn)行web開發(fā)

    SSM框架,即Spring、SpringMVC和MyBatis的整合,是Java Web開發(fā)中常用的技術(shù)棧。它通過分層架構(gòu),實(shí)現(xiàn)了視圖、控制、業(yè)務(wù)邏輯和數(shù)據(jù)訪問的分離,提高了代碼的可維護(hù)性和可擴(kuò)展性
    的頭像 發(fā)表于 12-16 17:28 ?417次閱讀
    主站蜘蛛池模板: 国产一区二区高清| 曰本女人牲交视频免费| 国产乱码伦人偷精品视频| 三级黄.色| 丰满艳妇亲伦| 少妇大荫蒂毛多毛大| 国产成人精品电影| 午夜福到在线4国产| 国产色偷偷男人的天堂| 亚洲成人一区| 久草色视频| 折磨比基尼美女挠肚子| 露露的性战k8经典| AV福利无码亚洲网站麻豆| 欧美亚洲视频在线二区| 超碰最新地址| 翁止熄痒禁伦短文合集免费视频| 国产精品第九页| 亚洲精品线在线观看| 久久国产精品无码视欧美| 最新果冻传媒在线观看免费版| 嫩草成人国产精品| 超碰免费视频caopoom9| 私人玩物在线观看| 好色女博士| 最新国产成人综合在线观看| 挠黑色超薄丝袜脚心vk40分钟 | 国产精品国产三级国产AV麻豆| 无码专区aaaaaa免费视频| 果冻传媒 在线播放观看| 诱人的女邻居9中文观看| 欧美123区| 国产电影无码午夜在线播放| 亚洲bt区| 乐乐亚洲精品综合影院| YIN荡的老师系列第6部分视频| 特大黑人娇小亚洲女mp4| 回复术士勇者免费观看全集| 2018高清国产一区二区三区| 日本AAA片爽快视频| 国产麻豆91网在线看|