日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁(yè) > 科技  > 軟件

基于內(nèi)存和 Redis 的兩級(jí) Java 緩存框架

來(lái)源: 責(zé)編: 時(shí)間:2024-02-29 14:36:07 205觀看
導(dǎo)讀環(huán)境:SpringBoot2.7.12 + j2cache2.8.51. 簡(jiǎn)介J2Cache 是 OSChina 目前正在使用的兩級(jí)緩存框架(要求至少 Java 8)。第一級(jí)緩存使用內(nèi)存(同時(shí)支持 Ehcache 2.x、Ehcache 3.x 和 Caffeine),第二級(jí)緩存使用 Redis(推薦)/Memc

環(huán)境:SpringBoot2.7.12 + j2cache2.8.5A8328資訊網(wǎng)——每日最新資訊28at.com

1. 簡(jiǎn)介

J2Cache 是 OSChina 目前正在使用的兩級(jí)緩存框架(要求至少 Java 8)。第一級(jí)緩存使用內(nèi)存(同時(shí)支持 Ehcache 2.x、Ehcache 3.x 和 Caffeine),第二級(jí)緩存使用 Redis(推薦)/Memcached 。由于大量的緩存讀取會(huì)導(dǎo)致 L2 的網(wǎng)絡(luò)成為整個(gè)系統(tǒng)的瓶頸,因此 L1 的目標(biāo)是降低對(duì) L2 的讀取次數(shù)。該緩存框架主要用于集群環(huán)境中。單機(jī)也可使用,用于避免應(yīng)用重啟導(dǎo)致的緩存冷啟動(dòng)后對(duì)后端業(yè)務(wù)的沖擊。A8328資訊網(wǎng)——每日最新資訊28at.com

數(shù)據(jù)讀取

  • 讀取順序 -> L1 -> L2 -> DB
  • 數(shù)據(jù)更新
    從數(shù)據(jù)庫(kù)中讀取最新數(shù)據(jù),依次更新 L1 -> L2 ,發(fā)送廣播清除某個(gè)緩存信息
    接收到廣播(手工清除緩存 & 一級(jí)緩存自動(dòng)失效),從 L1 中清除指定的緩存信息

2. 實(shí)戰(zhàn)案例

2.1 依賴管理

<dependency>  <groupId>net.oschina.j2cache</groupId>  <artifactId>j2cache-core</artifactId>  <version>2.8.5-release</version></dependency><dependency>  <groupId>net.oschina.j2cache</groupId>  <artifactId>j2cache-spring-boot2-starter</artifactId>  <version>2.8.0-release</version></dependency>

2.2 配置

redis:  # 地址, 多個(gè)地址使用‘,’逗號(hào)分割  hosts: localhost:6379  # 數(shù)據(jù)庫(kù)索引  database: 11  # 密碼  password: xxxooo  # 連接超時(shí)時(shí)間  timeout: 10s  # 連接池中的最小空閑連接  min-idle: 0  # 連接池中的最大空閑連接  max-idle: 8  # 連接池的最大數(shù)據(jù)庫(kù)連接數(shù)  max-active: 8  # #連接池最大阻塞等待時(shí)間(使用負(fù)值表示沒(méi)有限制)  max-wait: -1ms---j2cache:  openSpringCache: true  # 緩存中不存在時(shí),運(yùn)行緩存空對(duì)象  allowNullValues: true  redisClient: lettuce  l2CacheOpen: true  # 一級(jí)緩存使用caffeine  L1:    provider_class: caffeine  L2:    #使用springRedis替換二級(jí)緩存    provider_class: net.oschina.j2cache.cache.support.redis.SpringRedisProvider    config_section: redis  #使用springRedis進(jìn)行廣播通知緩失效  broadcast: net.oschina.j2cache.cache.support.redis.SpringRedisPubSubPolicy# 上面配置的一級(jí)緩存為caffeine, 那么這里對(duì)一級(jí)緩存的配置就必須以這個(gè)caffeine開(kāi)頭  caffeine:  # 配置一級(jí),二級(jí)緩存的region,有效時(shí)間  region.xj: 10000, 120s---spring:  cache:    # 一級(jí)緩存使用caffeine    type: caffeine

2.3 核心操作類

@Servicepublic class UserService {  private final UserRepository userRepository ;  public UserService(UserRepository userRepository) {    this.userRepository = userRepository ;  }  @Transactional  public User save(User user) {    return this.userRepository.saveAndFlush(user) ;  }  @Cacheable(value = {"xj"}, key = "#id")  public User get(Long id) {    return this.userRepository.findById(id).orElse(null) ;  }  @Transactional  @CacheEvict(value = {"xj"}, key = "#id")  public void remove(Long id) {    this.userRepository.deleteById(id) ;  }}

以上是基本的操作,非常簡(jiǎn)單。A8328資訊網(wǎng)——每日最新資訊28at.com

2.4 Controller接口

@RestController@RequestMapping("/users")public class UserController {  private final UserService userService ;  // 通過(guò)CacheChannel操作j2cache緩存方法  private final CacheChannel cacheChannel;    public UserController(UserService userService, CacheChannel cacheChannel) {    this.userService = userService ;    this.cacheChannel = cacheChannel ;   }    @GetMapping("/save")  public User save() {    User user = new User() ;    int num = new Random().nextInt(80);    user.setAge(num) ;    user.setName("姓名 - " + num) ;    user.setSex(num >= 50 ? "男" : "女") ;    return this.userService.save(user) ;  }    @GetMapping("/{id}")  public Object get(@PathVariable("id") Long id) {    // 從指定的region,指定的key獲取數(shù)據(jù),如果一級(jí),二級(jí)緩存中不存在,則通過(guò)第三個(gè)參數(shù)Function手動(dòng)獲取    // 如果緩存中不存在時(shí),同時(shí)配置了允許緩存空對(duì)象,則會(huì)緩存一個(gè)空對(duì)象到緩存中    return this.cacheChannel.get("xj", id.toString(), key -> this.userService.get(id) , true) ;  }    @GetMapping("/delete/{id}")  public Object remove(@PathVariable("id") Long id) {    this.userService.remove(id) ;    return "success" ;  }  }

2.5 測(cè)試

先通過(guò)save接口添加數(shù)據(jù)A8328資訊網(wǎng)——每日最新資訊28at.com

圖片圖片A8328資訊網(wǎng)——每日最新資訊28at.com

查詢id=2的數(shù)據(jù)A8328資訊網(wǎng)——每日最新資訊28at.com

圖片圖片A8328資訊網(wǎng)——每日最新資訊28at.com

level=3 表示本次數(shù)據(jù)緩存中不存在,從數(shù)據(jù)庫(kù)中獲取的。刷新頁(yè)面A8328資訊網(wǎng)——每日最新資訊28at.com

圖片圖片A8328資訊網(wǎng)——每日最新資訊28at.com

level=2,本次數(shù)據(jù)從二級(jí)緩存redis中獲取。再次刷新頁(yè)面A8328資訊網(wǎng)——每日最新資訊28at.com

圖片圖片A8328資訊網(wǎng)——每日最新資訊28at.com

level=1,本次數(shù)據(jù)從一級(jí)緩存caffeine中獲取。后續(xù)再怎么刷新只要緩存沒(méi)有過(guò)期都將從一級(jí)緩存中獲取。A8328資訊網(wǎng)——每日最新資訊28at.com

測(cè)試不存在的數(shù)據(jù)

圖片圖片A8328資訊網(wǎng)——每日最新資訊28at.com

從數(shù)據(jù)庫(kù)中查詢不存在的數(shù)據(jù)。A8328資訊網(wǎng)——每日最新資訊28at.com

圖片圖片A8328資訊網(wǎng)——每日最新資訊28at.com

緩存了空對(duì)象。A8328資訊網(wǎng)——每日最新資訊28at.com

測(cè)試刪除數(shù)據(jù)

圖片圖片A8328資訊網(wǎng)——每日最新資訊28at.com

緩存中會(huì)立即清除A8328資訊網(wǎng)——每日最新資訊28at.com

圖片圖片A8328資訊網(wǎng)——每日最新資訊28at.com

以上是本篇文章的全部?jī)?nèi)容,希望對(duì)你有幫助。A8328資訊網(wǎng)——每日最新資訊28at.com

完畢!!!A8328資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-75295-0.html基于內(nèi)存和 Redis 的兩級(jí) Java 緩存框架

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 沒(méi)看過(guò)AQS源碼,別說(shuō)精通Java并發(fā)編程

下一篇: 了解HttpListener:用于創(chuàng)建基于HTTP協(xié)議的桌面&amp;Web應(yīng)用程序

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 六大權(quán)益!華為8月服務(wù)日開(kāi)啟:手機(jī)免費(fèi)貼膜、維修免人工費(fèi)

    8月5日消息,一年一度的華為開(kāi)發(fā)者大會(huì)2023(Together)日前在松山湖拉開(kāi)帷幕,與此同時(shí),華為8月服務(wù)日也式開(kāi)啟,到店可享六大專屬權(quán)益。華為用戶可在華為商城Ap
  • 十個(gè)可以手動(dòng)編寫的 JavaScript 數(shù)組 API

    JavaScript 中有很多API,使用得當(dāng),會(huì)很方便,省力不少。 你知道它的原理嗎? 今天這篇文章,我們將對(duì)它們進(jìn)行一次小總結(jié)。現(xiàn)在開(kāi)始吧。1.forEach()forEach()用于遍歷數(shù)組接收一參
  • 如何使用JavaScript創(chuàng)建一只圖像放大鏡?

    譯者 | 布加迪審校 | 重樓如果您曾經(jīng)瀏覽過(guò)購(gòu)物網(wǎng)站,可能遇到過(guò)圖像放大功能。它可以讓您放大圖像的特定區(qū)域,以便瀏覽。結(jié)合這個(gè)小小的重要功能可以大大改善您網(wǎng)站的用戶體驗(yàn)
  • 谷歌KDD'23工作:如何提升推薦系統(tǒng)Ranking模型訓(xùn)練穩(wěn)定性

    谷歌在KDD 2023發(fā)表了一篇工作,探索了推薦系統(tǒng)ranking模型的訓(xùn)練穩(wěn)定性問(wèn)題,分析了造成訓(xùn)練穩(wěn)定性存在問(wèn)題的潛在原因,以及現(xiàn)有的一些提升模型穩(wěn)定性方法的不足,并提出了一種新
  • 每天一道面試題-CPU偽共享

    前言:了不起:又到了每天一到面試題的時(shí)候了!學(xué)弟,最近學(xué)習(xí)的怎么樣啊 了不起學(xué)弟:最近學(xué)習(xí)的還不錯(cuò),每天都在學(xué)習(xí),每天都在進(jìn)步! 了不起:那你最近學(xué)習(xí)的什么呢? 了不起學(xué)弟:最近在學(xué)習(xí)C
  • 最“俊美”淘寶賣家,靠直播和短視頻圈粉,上架秒光,年銷3000萬(wàn)

    來(lái)源 | 電商在線文|易琬玉編輯|斯問(wèn)受訪店鋪:Ringdoll戒之人形圖源:微博@御座的黃山、&ldquo;Ringdoll戒之人形&rdquo;淘寶店鋪有關(guān)外貌的評(píng)價(jià),黃山已經(jīng)聽(tīng)累了。生于1985年的他,哪
  • 梁柱接棒兩年,騰訊音樂(lè)闖出新路子

    文丨田靜 出品丨牛刀財(cái)經(jīng)(niudaocaijing)7月5日,企鵝FM發(fā)布官方公告稱由于業(yè)務(wù)調(diào)整,將于9月6日正式停止運(yùn)營(yíng),這意味著騰訊音樂(lè)長(zhǎng)音頻業(yè)務(wù)走向消亡。騰訊在長(zhǎng)音頻領(lǐng)域還在摸索。為
  • ESG的面子與里子

    來(lái)源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之三伏大幕拉起,各地高溫預(yù)警不絕,但處于厄爾尼諾大&ldquo;烤&rdquo;之下的除了眾生,還有各大企業(yè)發(fā)布的ESG報(bào)告。ESG是&ldquo;環(huán)境保
  • iQOO Neo8系列新品發(fā)布會(huì)

    旗艦雙芯 更強(qiáng)更Pro
Top 主站蜘蛛池模板: 阿克| 内黄县| 文山县| 开远市| 吉水县| 大城县| 正蓝旗| 化隆| 南召县| 太仓市| 曲靖市| 峡江县| 彭山县| 临汾市| 南召县| 镇巴县| 永吉县| 南岸区| 东丽区| 南靖县| 原阳县| 衡阳县| 伊吾县| 马边| 阿鲁科尔沁旗| 佛坪县| 宁河县| 教育| 措美县| 墨竹工卡县| 隆子县| 婺源县| 辽源市| 察哈| 平乐县| 瑞金市| 木里| 上犹县| 晴隆县| 山阴县| 漯河市|