Apache Ignite緩存基本操作

這段內容主要講解了 Apache Ignite 中緩存(IgniteCache)的基本操作,包括獲取緩存、創建緩存、銷毀緩存、執行原子操作以及異步操作等。下面我將用中文對這些內容進行詳細解釋,幫助你更好地理解。


一、獲取緩存實例(Getting an Instance of a Cache)

所有對緩存的操作都必須通過 IgniteCache 實例來完成。你可以獲取一個已經存在的緩存,或者動態創建一個新緩存。

示例代碼:

Ignite ignite = Ignition.ignite();// 獲取名為 "myCache" 的緩存實例
IgniteCache<Integer, String> cache = ignite.cache("myCache");

?? 注意:不同緩存的泛型類型可能不同,比如 IgniteCache<Integer, String>IgniteCache<String, Person> 是不同的類型。


二、動態創建緩存(Creating Caches Dynamically)

你也可以在運行時動態創建一個緩存,使用 getOrCreateCache() 方法。如果緩存已經存在,就直接返回;如果不存在,就根據配置創建。

示例代碼:

CacheConfiguration<Integer, String> cfg = new CacheConfiguration<>();
cfg.setName("myNewCache");
cfg.setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL);IgniteCache<Integer, String> cache = ignite.getOrCreateCache(cfg);

配置說明:

  • setName(...):設置緩存名稱。
  • setAtomicityMode(...):設置緩存的原子性模式(例如 TRANSACTIONALATOMIC)。
  • 還可以設置很多其他參數,比如備份數量、緩存模式(分區/復制)等。

注意事項:

  • 如果在集群拓撲發生變化(如節點加入或退出)時調用 getOrCreateCache(),可能會拋出異常:
    javax.cache.CacheException: class org.apache.ignite.IgniteCheckedException: Failed to start/stop cache, cluster state change is in progress.
    
  • 遇到這個異常時,建議稍后重試。

三、銷毀緩存(Destroying Caches)

使用 destroy() 方法可以從整個集群中刪除一個緩存。

示例代碼:

Ignite ignite = Ignition.ignite();
IgniteCache<Long, String> cache = ignite.cache("myCache");
cache.destroy();  // 刪除名為 "myCache" 的緩存

?? 注意:此操作是不可逆的,會刪除所有節點上的緩存數據和配置。


四、基本原子操作(Basic Atomic Operations)

獲取到緩存后,可以進行常見的 putgetremove 等操作。

示例代碼:

IgniteCache<Integer, String> cache = ignite.cache("myCache");// 存入數據
for (int i = 0; i < 10; i++) {cache.put(i, Integer.toString(i));
}// 獲取數據
for (int i = 0; i < 10; i++) {System.out.println("Got [key=" + i + ", val=" + cache.get(i) + ']');
}

批量操作注意事項:

  • 使用 putAll()removeAll() 等批量操作時,是作為一系列原子操作執行的。
  • 如果部分操作失敗,會拋出 CachePartialUpdateException,并包含失敗的 key 列表。
  • 如果希望批量操作作為一個整體完成,建議使用 事務

五、條件更新操作(Conditional Updates)

Ignite 提供了一些帶有條件判斷的更新方法,用于實現線程安全的更新邏輯。

示例代碼:

// 如果 key 不存在,則插入,返回舊值
String oldVal = cache.getAndPutIfAbsent(11, "Hello");// 如果 key 不存在,插入,返回是否成功
boolean success = cache.putIfAbsent(22, "World");// 如果 key 存在,替換,返回舊值
oldVal = cache.getAndReplace(11, "New value");// 如果 key 存在,替換,返回是否成功
success = cache.replace(22, "Other new value");// 如果值匹配,才替換
success = cache.replace(22, "Other new value", "Yet-another-new-value");// 如果值匹配,才刪除
success = cache.remove(11, "Hello");

六、異步操作(Asynchronous Execution)

Ignite 的很多緩存操作都有對應的 異步版本,方法名通常帶有 Async 后綴。

示例代碼:

// 同步 get
V get(K key);// 異步 get
IgniteFuture<V> getAsync(K key);

異步操作的處理方式:

  • 返回一個 IgniteFuture 對象,表示異步操作的結果。
  • 可以阻塞等待結果,也可以注冊監聽器來非阻塞地處理結果。

示例監聽器:

IgniteCompute compute = ignite.compute();IgniteFuture<String> fut = compute.callAsync(() -> "Hello World");fut.listen(f -> System.out.println("Job result: " + f.get()));

七、線程池與閉包執行(Closures Execution and Thread Pools)

  • 如果異步操作在注冊監聽器前就已經完成,監聽器會由當前線程 同步執行
  • 如果異步操作還未完成,監聽器會在操作完成后由線程池中的線程 異步執行
    • 緩存操作的異步回調通常由 系統線程池 執行。
    • 計算任務的異步回調通常由 公共線程池 執行。

注意事項:

  • 不要在監聽器中再調用同步的緩存或計算操作,這可能導致 線程池饑餓(pool starvation)死鎖
  • 如需嵌套異步操作,可以使用 自定義線程池 來避免資源爭用。

總結表格

操作類型描述
獲取緩存通過 ignite.cache("name") 獲取緩存實例
創建緩存使用 getOrCreateCache(cfg) 動態創建緩存
銷毀緩存調用 cache.destroy() 刪除緩存
原子操作put, get, remove 等基本操作
條件更新putIfAbsent, replace, remove 等帶條件操作
異步操作使用 xxxAsync() 方法和 IgniteFuture
線程池監聽器可能由系統或公共線程池執行,避免同步調用

如果你是剛開始學習 Ignite,理解這些基本緩存操作非常重要。它們是構建分布式緩存應用的基礎。對于更復雜的場景,如事務、查詢、索引等,請參考 Ignite 的高級功能文檔。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/90053.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/90053.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/90053.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

最新基于R語言結構方程模型分析與實踐技術應用

現代統計學理論和方法的不斷完善&#xff0c;使科研工作對統計方法的要求也越來越高&#xff0c;面對紛繁復雜的數據&#xff0c;如何選擇最為合適的數據分析方法已成為科研工作者&#xff0c;尤其是廣大剛處于科研生涯起步階段的研究生們最為棘手問題。隨著科學的發展&#xf…

物聯網_TDengine_EMQX_性能測試

一、Tdengine接口開發文檔 1、數據庫 1.創建數據庫 URL /dp/createdb/ method post 請求示例 {"db_name":"demo01" // 必填 }響應示例 // 成功 {"code": 1,"data": {"成功創建數據庫": "demo04"},"error…

從分析到優化:Amazon Q CLI 助力 EKS 網絡調用鏈剖析與運維實踐

1. 引言 在 Amazon EKS&#xff08;Elastic Kubernetes Service&#xff09;環境中&#xff0c;理解從 ALB&#xff08;Application Load Balancer&#xff09;到 Pod 的完整網絡調用鏈對運維人員至關重要。本文將展示如何利用 Amazon Q CLI 這一 AI 助手工具&#xff0c;通過…

Class10簡潔實現

Class10簡潔實現 import torch from torch import nn from d2l import torch as d2l# 輸入為28*28&#xff0c;輸出為10類&#xff0c;第1、2隱藏層256神經元 num_inputs, num_outputs, num_hiddens1, num_hiddens2 784, 10, 256, 256 # 第1個隱藏層丟棄率為0.2&#xff0c;第…

【多線程篇22】:ConcurrentHashMap的并發安全原理剖析

文章目錄一、HashMap 的“不安全”&#xff1a;問題的根源1. 數據結構回顧 (JDK 1.8)2. 并發下的致命缺陷&#xff1a;put 操作二、ConcurrentHashMap 的安全之道 (JDK 1.8)1. 核心數據結構2. 安全的 put 操作&#xff1a;分場景精細化加鎖3. 安全的 size() 計算&#xff1a;并…

【Java + Vue 實現圖片上傳后 導出圖片及Excel 并壓縮為zip壓縮包】

系統環境&#xff1a; Java JDK&#xff1a;1.8.0_202 Node.js&#xff1a;v12.2.0 Npm&#xff1a;6.9.0 Java后端實現 Controller /*** xxxx-導出* param response 返回信息體* param files 上傳的圖片文件* param param1 參數1* param param2 參數2*/PostMapping("/ex…

安科瑞:能源微電網助力工業園區“綠色”發展

朱以真近日&#xff0c;廈門市工業和信息化局印發工業園區綠色智慧微電網建設&#xff0c;擬開展全市工業園區綠色智慧微電網試點通知&#xff0c;那么對于如何實現綠色園區的建設是今天的話題。對工業園區綠色智慧微電網建設需求&#xff0c;其核心價值體現在“源-網-荷-儲-充…

VUE2 學習筆記3 v-on、事件修飾符、鍵盤事件

事件處理v-on用于事件交互。語法&#xff1a;v-on:要綁定的事件“事件觸發時執行的函數” &#xff08;函數這里可以寫括號&#xff0c;也可以不寫&#xff0c;沒有影響&#xff09;簡寫&#xff1a;:事件觸發時要執行的函數&#xff0c;在Vue配置參數中&#xff0c;通過method…

變換域通訊系統CCSK的matlab仿真

CCSK&#xff08;Cyclic Code Shift Keying&#xff09;通信系統的MATLAB仿真。實現完整的CCSK調制、AWGN信道傳輸和解調過程&#xff0c;并計算了誤碼率&#xff08;BER&#xff09;。 % CCSK通信系統仿真 clear; clc; close all;% 參數設置 L 31; % m序列…

技術演進中的開發沉思-40 MFC系列:多線程協作

今天說說MFC的線程&#xff0c;當年用它實現中間件消息得心應手之時&#xff0c;可以實現一邊實時接收數據&#xff0c;一邊更新界面圖表圖文信息&#xff0c;順滑得讓人想吹聲口哨。 MFC 多線程它像給程序裝上了分身術&#xff0c;讓原本只能 “單任務跑腿” 的代碼&#xff0…

高速公路自動化安全監測主要內容

近年來&#xff0c;隨著社會經濟的快速發展&#xff0c;高速公路的通車里程不斷增加&#xff0c;交通流量日益增大。與此同時&#xff0c;高速公路交通事故數量也呈現出一定的增長趨勢。這些事故不僅造成了大量的人員傷亡和財產損失&#xff0c;還嚴重影響了社會的穩定和經濟的…

完美解決 Ubuntu 中自定義啟動器圖標重復的問題(以 MATLAB 為例)

如果你在 Ubuntu 上為 MATLAB、PyCharm、Android Studio 或其他第三方應用創建了自定義啟動器&#xff0c;并把它固定到了左側的 Dock 欄&#xff0c;你很可能遇到過這個令人抓狂的場景&#xff1a; 當你滿心歡喜地點擊固定的圖標啟動程序后&#xff0c;Dock 欄上竟然“憑空”冒…

一文讀懂深度模型優化器,掌握煉丹工具

深度模型優化器是訓練神經網絡的核心工具&#xff0c;其目標是高效地找到損失函數的最小值。從基礎的隨機梯度下降&#xff08;SGD&#xff09;到結合一階動量修正與兩階段更新的Ranger&#xff0c;優化器的發展始終圍繞著加速收斂、提升穩定性、適應參數差異和增強泛化能力四大…

關于虛擬機部署的k8s集群calico組件在開機恢復快照時的問題

在恢復虛擬機開機快照的時候總會出現各種的網絡問題&#xff0c;連接不到自己的443端口&#xff0c;集群狀態異常等等&#xff0c;繞一圈都發現不了問題&#xff0c;其實根本就沒問題。虛擬機環境再現&#xff0c;恢復快照后的k8s環境&#xff0c;nfs莫名宕掉提示此報錯&#x…

從感知到決策:虛擬仿真系統與視覺算法融合下的多路RTSP視頻接入技術探究

1?? 背景概述 隨著國防信息化和智能化進程的不斷加快&#xff0c;虛擬仿真系統 與 智能視覺算法平臺 正逐步成為現代化裝備研發、測試驗證與戰術訓練的重要技術支撐。相比傳統的靜態建模或離線推演&#xff0c;新一代作戰仿真與智能系統更強調 實時性、感知能力與動態交互&a…

Android app如果不適配Android 15會怎么樣

深度思考完成 用時49秒 首先&#xff0c;用戶的問題是&#xff1a;“Android app如果不適配Android 15會怎么樣&#xff1f;”我需要基于搜索結果來回答。 讓我回顧搜索結果&#xff1a; ?1&#xff1a;標題是“Android 15應用適配指南”&#xff0c;內容強調了不適配Androi…

Vue-21-利用Vue3的axios+Python的flask實現前后端交互功能

文章目錄 1 任務需求 2 前端 2.1 模板template 2.2 JS代碼script 2.3 Calculate.vue(子組件) 2.4 App.vue(根組件) 3 后端 3.1 導入模塊 3.2 創建應用實例 3.3 配置CORS 3.4 定義路由 3.5 處理請求 3.6 main.py 4 附錄 4.1 CORS 4.1.1 全局啟用CORS 4.1.2 限制允許的域名(更安…

動態規劃之最長回文子串

題目&#xff1a;最長回文子串 給你一個字符串 s&#xff0c;找到 s 中最長的 回文 子串。 示例 1&#xff1a; 輸入&#xff1a;s “babad” 輸出&#xff1a;“bab” 解釋&#xff1a;“aba” 同樣是符合題意的答案。 示例 2&#xff1a; 輸入&#xff1a;s “cbbd” 輸…

Linux 編程中的錯誤處理機制詳解 —— `errno` 全解析

文章目錄Linux 編程中的錯誤處理機制詳解 —— errno 全解析一、什么是 errno&#xff1f;?為什么需要 errno&#xff1f;? 它在哪里定義&#xff1f;二、errno 的設置與讀取規則?? errno 不是總是有效&#xff01;?使用 errno 的正確步驟&#xff1a;三、與 errno 配套使…

力扣-最長遞增子序列

簡單記錄學習~給你一個整數數組 nums &#xff0c;找到其中最長嚴格遞增子序列的長度。子序列 是由數組派生而來的序列&#xff0c;刪除&#xff08;或不刪除&#xff09;數組中的元素而不改變其余元素的順序。例如&#xff0c;[3,6,2,7] 是數組 [0,3,1,6,2,2,7] 的子序列。示例…