欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Apache Ignite緩存基本操作實(shí)例詳解

 更新時(shí)間:2025年07月23日 14:50:51   作者:lang20150928  
文章介紹了Apache Ignite中IgniteCache的基本操作,涵蓋緩存獲取、動(dòng)態(tài)創(chuàng)建、銷毀、原子及條件更新、異步執(zhí)行,強(qiáng)調(diào)線程池注意事項(xiàng),避免同步調(diào)用導(dǎo)致資源爭(zhēng)用或死鎖,感興趣的朋友跟隨小編一起看看吧

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

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

所有對(duì)緩存的操作都必須通過(guò) IgniteCache 實(shí)例來(lái)完成。你可以獲取一個(gè)已經(jīng)存在的緩存,或者動(dòng)態(tài)創(chuàng)建一個(gè)新緩存。

示例代碼:

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

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

二、動(dòng)態(tài)創(chuàng)建緩存(Creating Caches Dynamically)

你也可以在運(yùn)行時(shí)動(dòng)態(tài)創(chuàng)建一個(gè)緩存,使用 getOrCreateCache() 方法。如果緩存已經(jīng)存在,就直接返回;如果不存在,就根據(jù)配置創(chuàng)建。

示例代碼:

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

配置說(shuō)明:

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

注意事項(xiàng):

  • 如果在集群拓?fù)浒l(fā)生變化(如節(jié)點(diǎn)加入或退出)時(shí)調(diào)用 getOrCreateCache(),可能會(huì)拋出異常:
javax.cache.CacheException: class org.apache.ignite.IgniteCheckedException: Failed to start/stop cache, cluster state change is in progress.
  • 遇到這個(gè)異常時(shí),建議稍后重試。

三、銷毀緩存(Destroying Caches)

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

示例代碼:

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

?? 注意:此操作是不可逆的,會(huì)刪除所有節(jié)點(diǎn)上的緩存數(shù)據(jù)和配置。

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

獲取到緩存后,可以進(jìn)行常見(jiàn)的 putget、remove 等操作。

示例代碼:

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

批量操作注意事項(xiàng):

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

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

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

示例代碼:

// 如果 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 的很多緩存操作都有對(duì)應(yīng)的 異步版本,方法名通常帶有 Async 后綴。

示例代碼:

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

異步操作的處理方式:

  • 返回一個(gè) IgniteFuture 對(duì)象,表示異步操作的結(jié)果。
  • 可以阻塞等待結(jié)果,也可以注冊(cè)監(jiān)聽(tīng)器來(lái)非阻塞地處理結(jié)果。

示例監(jiān)聽(tīng)器:

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

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

  • 如果異步操作在注冊(cè)監(jiān)聽(tīng)器前就已經(jīng)完成,監(jiān)聽(tīng)器會(huì)由當(dāng)前線程 同步執(zhí)行。
  • 如果異步操作還未完成,監(jiān)聽(tīng)器會(huì)在操作完成后由線程池中的線程 異步執(zhí)行
    • 緩存操作的異步回調(diào)通常由 系統(tǒng)線程池 執(zhí)行。
    • 計(jì)算任務(wù)的異步回調(diào)通常由 公共線程池 執(zhí)行。

注意事項(xiàng):

  • 不要在監(jiān)聽(tīng)器中再調(diào)用同步的緩存或計(jì)算操作,這可能導(dǎo)致 線程池饑餓(pool starvation)死鎖
  • 如需嵌套異步操作,可以使用 自定義線程池 來(lái)避免資源爭(zhēng)用。

總結(jié)表格

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

如果你是剛開(kāi)始學(xué)習(xí) Ignite,理解這些基本緩存操作非常重要。它們是構(gòu)建分布式緩存應(yīng)用的基礎(chǔ)。對(duì)于更復(fù)雜的場(chǎng)景,如事務(wù)、查詢、索引等,請(qǐng)參考 Ignite 的高級(jí)功能文檔。

到此這篇關(guān)于Apache Ignite緩存基本操作的文章就介紹到這了,更多相關(guān)Apache Ignite緩存內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Linux Centos7下安裝Python的方法

    詳解Linux Centos7下安裝Python的方法

    本篇文章主要介紹了詳解Linux Centos7下安裝Python的方法,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2017-01-01
  • 如何解決Too many levels of symbolic links的問(wèn)題

    如何解決Too many levels of symbolic lin

    這篇文章主要介紹了如何解決Too many levels of symbolic links的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • 解決啟動(dòng)php-fpm后訪問(wèn)不到php文件的辦法

    解決啟動(dòng)php-fpm后訪問(wèn)不到php文件的辦法

    今天碰了一個(gè)很奇怪的問(wèn)題,當(dāng)啟動(dòng)php-fpm后,發(fā)現(xiàn)居然訪問(wèn)不到php文件了,后來(lái)通過(guò)查看日志、分析+搜索終于解決了,現(xiàn)在將整個(gè)過(guò)程分享給大家,也方便同樣遇到這個(gè)問(wèn)題的同學(xué)們參考借鑒,下面來(lái)一起看看吧。
    2016-12-12
  • Apache?Log4j2?遠(yuǎn)程代碼執(zhí)行漏洞分析+檢測(cè)+防護(hù)(最新推薦)

    Apache?Log4j2?遠(yuǎn)程代碼執(zhí)行漏洞分析+檢測(cè)+防護(hù)(最新推薦)

    Apache?Log4j2是一款開(kāi)源的Java日志框架,被廣泛地應(yīng)用在中間件、開(kāi)發(fā)框架與Web應(yīng)用中,用來(lái)記錄日志信息,這篇文章主要介紹了Apache?Log4j2?遠(yuǎn)程代碼執(zhí)行漏洞分析+檢測(cè)+防護(hù)(最新推薦),需要的朋友可以參考下
    2024-07-07
  • linux系統(tǒng)的初始化配置淺析

    linux系統(tǒng)的初始化配置淺析

    本文給大家介紹linux系統(tǒng)的初始化配置,涉及到網(wǎng)絡(luò)的初始化,主機(jī)名的修改,關(guān)閉firewalld和selinux的方法等知識(shí)點(diǎn),本文介紹的非常詳細(xì),具有參考借鑒價(jià)值,感興趣的朋友一起看看吧
    2016-10-10
  • CentOS 7下MongoDB的安裝配置詳解

    CentOS 7下MongoDB的安裝配置詳解

    本篇文章主要介紹了CentOS 7下MongoDB的安裝配置詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-03-03
  • linux環(huán)境安裝node.js開(kāi)發(fā)環(huán)境搭建圖文教程

    linux環(huán)境安裝node.js開(kāi)發(fā)環(huán)境搭建圖文教程

    這篇文章主要介紹了 linux環(huán)境安裝node.js開(kāi)發(fā)環(huán)境搭建圖文教程的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • 在CentOS7上搭建Jenkins+Maven+Git持續(xù)集成環(huán)境的方法

    在CentOS7上搭建Jenkins+Maven+Git持續(xù)集成環(huán)境的方法

    這篇文章主要介紹了在CentOS7上搭建Jenkins+Maven+Git持續(xù)集成環(huán)境的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • 如何搭建自己CDN服務(wù)器(LuManager)

    如何搭建自己CDN服務(wù)器(LuManager)

    這篇文章主要介紹了如何搭建自己CDN服務(wù)器(LuManager),需要的朋友可以參考下
    2016-04-04
  • Linux 目錄結(jié)構(gòu)詳細(xì)介紹

    Linux 目錄結(jié)構(gòu)詳細(xì)介紹

    這篇文章主要介紹了Linux 目錄結(jié)構(gòu)詳細(xì)介紹,文章內(nèi)容介紹的很詳細(xì),有對(duì)于linux目錄結(jié)構(gòu)不是太了解的同學(xué)可以參考下
    2021-02-02

最新評(píng)論