Apache Geode的Java客户端

首先

下面是使用Apache Geode实现Java客户端的示例。
使用的执行环境是Java8和Geode1.6。

简单的例子 de

依赖

        <dependency>
            <groupId>org.apache.geode</groupId>
            <artifactId>geode-core</artifactId>
            <version>1.6.0</version>
        </dependency>

Java的代码

import org.apache.geode.cache.Region;
import org.apache.geode.cache.client.ClientCache;
import org.apache.geode.cache.client.ClientCacheFactory;
import org.apache.geode.cache.client.ClientRegionShortcut;

public class GeodeTest {

  public static void main(String[] args) {

    ClientCache cache = null;
    try {
      cache = new ClientCacheFactory()
          .addPoolLocator("xxx01.yahoo.co.jp", 10334)
          .create();

      Region<String,String> region = cache
          .<String,String>createClientRegionFactory(ClientRegionShortcut.PROXY)
          .create("pregion");

      region.put("key1", "value1");

      String value = region.get("key1");

      System.out.println("value:" + value);

    } finally {
      if ( cache != null ) {
        cache.close();  
      }
    }
  }
}

执行结果

value:value1

如果有多个locator,需要调用addPoolLocator多次。我认为这个实现方式十分简单,没有必要进行解释的必要。

      cache = new ClientCacheFactory()
          .addPoolLocator("xxx01.yahoo.co.jp", 10334)          
          .addPoolLocator("xxx02.yahoo.co.jp", 10334)
          .create();

也许有人注意到了代码中的Region<String, String>的描述,但是在Geode中可以存储的不仅仅是String。例如,可能还可以存储Map、List以及自定义的类。在Redis中,如果想存储复杂的数据结构,则会使用Hash或者使用Json进行注册,我认为这是Geode易于使用的一个特点。

注册一个独立的班级

我試著創建一個簡單的實體。

import java.io.Serializable;

public class TestEntity implements Serializable {

  private String value1;
  private String value2;

// setter/getter割愛

如果在Geode中使用,请注意需要Serializable。

我会按照以下方式进行实施。

      Region<String,TestEntity> region = cache
          .<String,TestEntity>createClientRegionFactory(ClientRegionShortcut.PROXY)
          .create("pregion");

      TestEntity putEntity = new TestEntity();
      putEntity.setValue1("v1");
      putEntity.setValue2("v2");

      region.put("key1", putEntity);

      TestEntity getEntity = region.get("key1");

      System.out.println("value1:" + getEntity.getValue1());
      System.out.println("value2:" + getEntity.getValue2());

执行结果

value1:v1
value2:v2

罐子的部署

可以单独注册一个类,但是事实上,只有注册并不能在gfsh上确认该值。
通过将包含先前创建的类的jar部署到Geode上,可以确认该值。
首先,要部署创建好的jar。

gfsh>deploy --jars=/<Jarを配置したディレクトリ>/geode-sanple-1.0.jar

Deploying files: geode-sanple-1.0.jar
Total file size is: 0.01MB

Continue?  (Y/n): y
Member  |     Deployed JAR     | Deployed JAR Location
------- | -------------------- | ----------------------------------------------------
server1 | geode-sanple-1.0.jar | /xxxx/geode/server1/geode-sanple-1.0.v1.jar
server2 | geode-sanple-1.0.jar | /xxxx/geode/server2/geode-sanple-1.0.v1.jar
server3 | geode-sanple-1.0.jar | /xxxx/geode/server3/geode-sanple-1.0.v1.jar

我会尝试获取

gfsh>get --region=pregion --key=key1
Result      : true
Key Class   : java.lang.String
Key         : key1
Value Class : TestEntity

value1 | value2
------ | ------
v1     | v2

我已经可以使用gfsh确认内容了。
此外,据说可以使用PDX Serialization来使用,不需要部署,但我还没有试过。

总结

我创建了一个简单的Java客户端。
对于使用Spring的用户,还可以使用Spring Data Geode。因为只需要创建一个连接到Geode的Bean并注入ClientCache,所以我将跳过解释的部分。
下一次我会写关于过期(expire)的内容。

广告
将在 10 秒后关闭
bannerAds