天天看点

Apache Ignite 入门(3) 分布式缓存基础分布式缓存的简单操作

分布式缓存的简单操作

本节使用的pom.xml文件和第(1)节中的保持不变。

本节主要介绍分布式缓存的简单使用,缓存的配置以及事务处理,分布式锁和sql查询功能在后面的章节中介绍。

ignite节点的模式

ignite的节点分为server模式和client模式, server节点用来缓存数据,提供任务运算和流数据处理。client节点用来连接集群,使用ignite的数据和计算api。 如果不配置节点默认作为Server模式启动。

可以使用xml模式和java模式来配置节点。

<bean class="org.apache.ignite.configuration.IgniteConfiguration">
    ...   
    <!-- client 模式 -->
    <property name="clientMode" value="true"/>
    ...
</bean>
           
IgniteConfiguration cfg = new IgniteConfiguration();

// client 模式 
cfg.setClientMode(true);

// 启动ignite  
Ignite ignite = Ignition.start(cfg);
           

或者使用下面的java配置启动client模式

Ignition.setClientMode(true);

// 这里的start() 也可以指定xml或者java形式的配置 
Ignite ignite = Ignition.start();
           

分布式缓存

缓存可以配置为复制模式(每个server节点上都复制一份数据)和分片模式(数据按照key分片存储到多个server节点上),这里先不介绍,采用默认的配置建立或获取分布式缓存。

先启动若干个server节点,用于存储数据和运行任务。启动后不要关闭。

public static void main(String[] args){
        // 使用默认的配置 启动节点
        Ignition.start();
    }
           

分布式缓存的基本结构

获取一个key为Integer类型,value为String类型的缓存系统。先存入数据然后获取数据。

import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.Ignition;

public class SimpleCache {

    public static void main(String[] args){

        // 以client的模式启动ignite, 数据存储到前面已经启动的ignite节点上 
        Ignition.setClientMode(true);

        try(Ignite ignite = Ignition.start()){
            // 如果缓存不存在创建 如果已存在就获取缓存 
            IgniteCache<Integer, String> cache = ignite.getOrCreateCache("simple");
            for(int i = ; i < ; i++){
                cache.put(i, i+"haha");
            }
            for(int i=; i< ; i++){
                System.out.println(cache.get(i));
            }
        }
    }
}
           

运行该程序在ignite集群中创建名称为simple的分布式缓存。第二次启动时,名称为simple的缓存已经存在获取该缓存,把put语句注释掉仍然可以获取到值。

异步操作

上面的缓存系统中的存储和获取是同步操作,下面介绍下异步操作。

IgniteCache<Integer, String> simple =
                    ignite.getOrCreateCache("simple");

// 启动异步操作 
IgniteCache<Integer, String>  asynCache = simple.withAsync();

// 原子操作 获取旧值 存入新值
asynCache.getAndPut(, "3332");

// 获取上面调用的future
IgniteFuture<Integer> fut = asynCache.future();
// 监听结果 
fut.listen(f -> System.out.println("Previous cache value: " + f.get()));
           

原子操作

IgniteCache<Integer, String> simple =
                    ignite.getOrCreateCache("simple");

// 插入或更新  返回旧值 
String oldVal = simple.getAndPut(, "haha");

// 如果不存在则插入 返回旧值
oldVal = simple.getAndPutIfAbsent(, "11 getAndPutIfAbsent2");

// 如果存在则替换 返回旧值
oldVal = simple.getAndReplace(, "11 getAndReplace");

// 删除键值对 返回旧值
oldVal = simple.getAndRemove();

// 如果不存在则插入 成功返回true
boolean success = simple.putIfAbsent(, "12 putIfAbsent");

// 如果存在则替换 成功返回 true
success = simple.replace(, "12 replace");

// 如果值匹配 则替换 成功返回true
success = simple.replace(, "12 replace", "12 12 12");

// 如果值匹配则删除 成功返回true
success = simple.remove(, "11");
           

继续阅读