国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

性能狂飆!Spring Boot 基于注解的八個緩存應用技巧

開發 前端
Spring Boot 基于注解的緩存機制,無疑是提升性能的強大助推器。本文將為你深度揭秘 8 個超實用的緩存應用技巧。從合理運用不同緩存注解,如精準使用 @Cacheable、@CachePut、@CacheEvict 實現緩存的增刪改查,到巧妙結合 Caffeine、Redis 等緩存組件,發揮它們各自優勢構建多級緩存體系;再到利用緩存策略,如設置合適的過期時間,優化緩存使用。

環境:SpringBoot3.4.2

1. 簡介

Spring Boot 基于注解的緩存機制,無疑是提升性能的強大助推器。本文將為你深度揭秘 8 個超實用的緩存應用技巧。從合理運用不同緩存注解,如精準使用 @Cacheable、@CachePut、@CacheEvict 實現緩存的增刪改查,到巧妙結合 Caffeine、Redis 等緩存組件,發揮它們各自優勢構建多級緩存體系;再到利用緩存策略,如設置合適的過期時間,優化緩存使用。

掌握這些技巧,能讓你輕松打破性能瓶頸,讓 Spring Boot 應用在數據處理的賽道上一路狂飆,為用戶帶來更流暢、高效的體驗。

2.實戰案例

2.1 @Cacheable緩存數據

如果一個方法使用了該注解,那么該方法(或該當前類中的所有方法)的返回值都可以被緩存。

@Cacheable(key = "#user.id", cacheNames = {"users"})
public User save(User user) {
  return user ;
}

這里將會以 "users" 為key的前綴+User對象的id值作為整個緩存的key,存入緩存管理對象中(可以使用Caffeine或Redis),如下以Redis為例:

圖片圖片

圖片圖片

2.2 @CacheConfig緩存配置

@CacheConfig 可以在類上進行通用緩存設置。當該注解應用于某個類時,它會為該類中定義的任何緩存操作提供一組默認設置。如下示例:

@Service
@CacheConfig(cacheNames = {"users"})
public class UserService {
  @Cacheable(key = "#user.id")
  public User save(User user) {
    return user ;
  }
}

如上配置,我們就可以在具體的方法上不用指定 cacheNames 屬性。該注解還可以配置如下的屬性:

public @interface CacheConfig {
  String[] cacheNames() default {}; 	 	
  // 緩存key的生成方式
  String keyGenerator() default "";
  // 緩存管理對象,具體將緩存存入哪里
  String cacheManager() default "";
  // 緩存解析,如果解析獲取緩存對象Cache(緩存內部都是通過Cache來管理緩存的)
  String cacheResolver() default "";
}

2.3 @CacheEvict刪除緩存

該注解用于指示某個方法(或某個類上的所有方法)會觸發緩存清除(cache evict)操作。如下示例:

@CacheEvict(cacheNames = "users", key = "#id")
public void deleteById(Long id) {
  System.out.printf("刪除用戶【%d】%n", id) ;
}

該示例將會刪除以 "users" 為前綴 + id 組成key 的緩存對象。

你也可以通過如下方式刪除所有緩存:

@CacheEvict(cacheNames = "users", allEntries = true)
public void deleteById(Long id) ;

這將刪除 users 為前綴下的所有緩存數據。

2.4 @CachePut更新緩存

這個注解用在方法上(或者一個類上的所有方法),表示這個方法執行完后,要把它的返回結果更新到緩存里。如下示例:

@CachePut(key = "#user.id")
public User updateUser(User user) {
  return user ;
}

該示例會更新緩存內容,不管該key是否存在,不存在則存入方法當前的返回值。

該注解與@Cacheable區別:

  • @Cacheable:如果緩存中指定的key已經存在,那么不會執行方法
  • @CachePut:不管指定的緩存key是否存在都將執行方法,并且將最終方法的返回值更新到緩存。

2.5 自定義key生成

當我們的key生成規則比較復雜時,我們可以自定義Key的生成策略,如下示例:

// 在沒有指定key的情況下
@Cacheable
public User save(User user)

該示例中,我們并沒有指定key屬性,默認情況下生成的key如下:

圖片圖片

自定義KeyGenerator
@Bean
KeyGenerator packKeyGenerator() {
  return new KeyGenerator() {
    @Override
    public Object generate(Object target, Method method, Object... params) {
      return target.getClass().getSimpleName() 
          + "@" + method.getName() 
          + "@" + Arrays.deepToString(params) ;
    }
  };
}
指定自定義的KeyGenerator
@Cacheable(keyGenerator = "packKeyGenerator")
public User save(User user)

最終生成key

圖片圖片

2.5 多級緩存

內存訪問迅捷但容量受限,Redis 分布式擴展性強卻速度稍遜,構建多級緩存可融合二者優勢。如下查找流程:

  • 首先,檢查內存(EhCache、Caffeine)
  • 如果未找到,則回退到 Redis
  • 最后,僅在必要時訪問數據庫

這需要采用多級緩存管理器。你可以使用以下庫來實現:

  • Spring 緩存抽象層 + Caffeine + Redis
  • [Bucket4j 或 Resilience4j](用于自定義策略)

2.6 緩存有效期TTL

切勿讓緩存永遠處于過期狀態。一定要設置超時。

關于緩存有效期,官方有如下說明:

直接通過你的緩存提供程序(來配置)。緩存抽象層是一種抽象,而非具體的緩存實現。你所采用的解決方案可能支持其他方案所不具備的各種數據策略和不同的拓撲結構(例如,JDK 的 ConcurrentHashMap——若在緩存抽象層中暴露它,則毫無意義,因為沒有底層支持)。這類功能應直接通過底層緩存(在配置時)或通過其原生 API 進行控制。

簡單說就是,具體是依賴你所使用的緩存實現有關。如下Redis緩存的有效期配置:

spring:
  cache:
    type: redis
    redis:
      time-to-live: 60s

緩存有效期60s。

圖片圖片

2.7 條件緩存

當不是所有的數據都需要進行緩存時,我們可以通過配置condition屬性來指定緩存的條件,如下示例:

@Cacheable(keyGenerator = "packKeyGenerator", 
  condition = "#user.id != 666")
public User save(User user)

如上示例,只有當id不為666時才會緩存該方法的緩存值。

我們還可以根據方法的返回值來決定是否進行緩存,如下示例:

Cacheable(unless = "#result == null")
public User save(User user)

如果當前方法的返回值為null,則不進行緩存。

2.8 異步緩存刷新

與其刪除并等待用戶請求重新填充緩存,不如主動刷新緩存。我們可以通過定時任務來刷新緩存數據,如下示例:

// 1小時執行一次
private final CacheManager cacheManager ;


@Scheduled(fixedRate = 3600000)
public void refreshDictCache() {
  List<Dict> dicts = dictRepository.findAll();
  dicts.forEach(d -> cacheManager.getCache("dicts").put(d.getId(), d)) ;
}

或者使用 Spring Events 在其他地方發生更新時觸發緩存重新填充。

責任編輯:武曉燕 來源: pringboot全家桶實戰案例
相關推薦

2025-05-09 09:26:12

2012-10-29 11:01:17

2022-12-15 16:38:17

2024-03-06 13:56:00

項目awaitpromise

2025-02-10 10:38:24

2024-03-21 09:58:27

ExtractTypeScript工具類型

2022-05-30 00:04:16

開源Github技巧

2023-10-24 09:25:23

IT技巧文化

2010-08-25 11:14:05

云安全數據安全網絡安全

2025-01-02 15:08:36

SpringBoot自動配置Java

2025-02-07 15:01:49

Promise數組前端

2024-04-01 07:51:49

Exclude?工具類型TypeScript

2024-01-02 16:16:34

Promise前端

2023-01-03 11:47:47

2022-08-01 06:22:38

人工智能AI

2018-04-09 12:44:45

Docker使用場景開發

2015-01-06 09:48:34

Docker多租戶docker應用

2010-09-09 13:44:06

DIVCSS

2011-09-25 10:46:18

云計算安全

2010-08-11 16:43:05

職場
點贊
收藏

51CTO技術棧公眾號

国产欧美日韩| 色综合久久综合网97色综合| 国产无套精品一区二区| 欧美电影院免费观看| 日韩欧美不卡在线观看视频| 在线观看你懂得| 亚洲在线一区二区三区| 538任你躁在线精品免费| 成人h版在线观看| 国产精品久久国产| 国产精品影音先锋| 国产一区丝袜| 亚洲人成网在线播放| 免费在线超碰| 99精品视频中文字幕| 精品国产乱码久久久久久夜甘婷婷| 手机福利视频欧美| **欧美大码日韩| 欧美日韩怡红院| 国产蜜臀av在线一区二区三区| 中文字幕の友人北条麻妃| 免费精品99久久国产综合精品| dy888夜精品国产专区| 欧美巨大xxxx| 日本道色综合久久影院| 猛男gaygay欧美视频| 国产91网红主播在线观看| 久久99精品久久久久久园产越南| 18性欧美xxxⅹ性满足| 亚洲成人黄色| 91成人在线观看国产| 国产剧情一区| www日韩av| 日韩在线播放一区二区| 免费国产成人看片在线| 波多野结衣亚洲一区| 麻豆一区二区三区视频| 国产精品高潮呻吟久久| 日韩黄色网址| 天天综合色天天| 每日更新在线观看av| 3atv在线一区二区三区| 国产www视频在线观看| 精品av久久707| 国产在线|日韩| 久久人91精品久久久久久不卡| 久久porn| 国产精品久久一区二区三区| 男男视频亚洲欧美| 欧美一级片中文字幕| 亚洲国产精品自拍| 影院在线观看全集免费观看| 中文字幕亚洲一区| 婷婷五月色综合香五月| 91黄色国产视频| 日日夜夜精品视频免费| 欧美日韩一区二区在线免费观看| 亚洲精品乱码久久久久久| 国产有码在线| 在线观看精品国产视频| 久久亚洲精精品中文字幕| 成人性生交大片免费看小说| 日韩中文字幕一区二区三区| 黄色av网址在线播放| 亚洲女子a中天字幕| 国产三级在线| 亚洲欧美国产高清va在线播| 国产精品调教| 国产日韩一区欧美| 国产99久久久国产精品潘金网站| 一级黄色特级片| 欧美在线free| a屁视频一区二区三区四区| 日本精品va在线观看| 国产日韩亚洲| 激情五月婷婷六月| 午夜精品久久久久久久| 高清在线视频不卡| 久久久人成影片一区二区三区观看 | 免费av在线一区| 三区四区不卡| 日本黄网站色大片免费观看| 天天影视网天天综合色在线播放 | 悠悠资源网亚洲青| 国产成人一区二区| 老鸭窝一区二区久久精品| a√免费观看在线网址www| 亚洲第一中文字幕| 亚洲经典一区| 老司机午夜av| 亚洲精品国产电影| 亚洲最新av| 成人au免费视频影院| 亚洲系列中文字幕| 久久蜜桃精品| 国产一区二区三区不卡在线| 欧美亚洲成人xxx| 99久久99久久久精品齐齐| 国产网红在线观看| 国产伦精品一区二区三区高清| 一区二区三区在线观看国产| 国产aⅴ精品一区二区四区| 日韩欧美在线一区二区| 精品久久久久久国产| 猫咪成人在线观看| 成人性视频欧美一区二区三区| 国产亚洲欧洲高清一区| 麻豆高清免费国产一区| 黄色在线观看网站| 国产在线资源一区| 欧美影院一区二区| 一区二区三区在线观看免费| 日本aⅴ写真网站免费| 91chinesevideo永久地址| 国产欧美一区二区三区网站| 国产精品视频一区二区三区| 人人妻人人添人人爽欧美一区| 亚洲嫩模很污视频| 久久99国产乱子伦精品免费| 国产羞羞视频在线播放| 蜜桃av噜噜一区二区三区| 欧美性xxxxxx少妇| 亚洲最新色图| av女优在线| 国产在线一区二区三区四区| 欧美手机在线视频| 一区二区91| 性欧美videoshd高清| 日韩欧美三级电影| 欧美r级在线观看| 蜜臀a∨国产成人精品| 黄频免费在线观看| 日本aa在线观看| 久久综合久久88| 国产欧美精品一区aⅴ影院| 国产欧美啪啪| 久久久久久久久久久久久久久久久久久 | 日韩欧美极品在线观看| 国产日韩欧美高清免费| 国产91足控脚交在线观看| 国产精品伊人日日| 亚洲成人在线网| 日韩精品一区国产麻豆| 欧美日韩dvd在线观看| 91欧美一区二区| 综合久久婷婷| 欧美亚洲大陆| 国产精品亚洲欧美日韩一区在线 | jazzjazz国产精品麻豆| 网曝91综合精品门事件在线| 女人高潮被爽到呻吟在线观看| 国产白丝在线观看| 狠狠综合久久av一区二区蜜桃| 国产在线小视频| 美女视频免费观看网站在线| 2019国产精品自在线拍国产不卡| 亚洲欧洲一区二区三区久久| 日韩成人在线视频网站| 亚洲美女在线视频| 亚洲精品中文字幕女同| 精品国产一区二区亚洲人成毛片| 精品裸体舞一区二区三区| 亚洲国产天堂久久综合网| 99精品视频在线播放观看| 亚洲午夜电影| 99久久亚洲精品| 国产精品人人爽人人做我的可爱| 日韩一级电影| 四虎8848精品成人免费网站| 这里只有精品在线| 久久99久久精品| 成人午夜在线播放| 久久99精品久久久久久久久久久久| 免费成人在线网站| 亚洲欧美日韩系列| 亚洲精品720p| 日韩美女免费视频| 91精品久久久久久久久久久久久| 中文字幕亚洲在线| 95av在线视频| 久久综合狠狠综合久久综青草| 国产又大又长又粗又黄| 免费观影入口看日本视频| 综合毛片免费视频| 亚洲天堂免费| 亚洲日本在线天堂| 精品99一区二区三区| 51色欧美片视频在线观看| 国产精成人品localhost| 无需播放器的av| 日韩经典一区| 99在线精品视频在线观看| 99久久久久久| 亚洲国产精品va在看黑人| 国产精品揄拍500视频| 久章草在线视频| 亚洲狼人在线| 久久这里只精品最新地址| 欧美视频中文字幕在线| 国产伦精品一区二区三区精品视频|