membase服务器到couchbase服务器迁移:Java客户端

时间:2017-03-21 05:11:36

标签: java couchbase spymemcached membase couchbase-java-api

我使用aspymemcached客户端连接到我的membase服务器。 代码看起来像:

public static MemcachedClient MemcachedClient(String bucketName){
        URI server1 = new URI("http://192.168.100.111:8091/pools");
        URI server2 = new URI("http://127.0.0.1:8091/pools");
        ArrayList<URI> serverList = new ArrayList<URI>();
        serverList.add(server1);
        serverList.add(server2);
        return  new MemcachedClient(serverList, bucketName, "");
}

将对象放入缓存中:

public static void makeMembaseCacheEntry(final String key, final int expiryTime, final Object value, final String bucketName) {
    MemcachedClient client = getMembaseClient(bucketName);
    if (client != null) {
        client.set(key, expiryTime, value);       
}

从缓存中获取对象:

   public static Object getMembaseCacheEntry(String key) {
        Object value = null;
         try {
            MemcachedClient client = getMembaseClient(bucketName);
            if (client != null) {
                value = client.get(key);
            }
        } catch (Exception e) {
        }
        return value;
}

现在我计划将membase服务器升级到couchbase服务器,因此我必须使用couchbase客户端java API(参考:http://docs.couchbase.com/developer/java-2.1/java-intro.html)。 在cousebase客户端中,对JsonObject ref执行了所有操作:

http://docs.couchbase.com/developer/java-2.0/documents-basics.html

那么如何将以上两种方法迁移到couchbase客户端

1 个答案:

答案 0 :(得分:1)

如果您要存储的是序列化Object,则Java SDK会提供SerializableDocument类型(请参阅https://developer.couchbase.com/documentation/server/4.6/sdk/java/document-operations.html#story-h2-10)。

它与构建在spymemcached之上的1.x客户端存储的对象兼容,但是它使用标志元数据,我不确定从Memcached迁移到Couchbase会如何影响这些(所以你可能不得不写一些迁移代码在某一点上。)

与Spymemcached相比,Couchbase SDK 2.x有一个更接近Couchbase群组组织的API:您开始连接Cluster,在其上打开Bucket,您可以在其上可以执行getupdateinsertupsert等关键/值操作。

在您的第一个代码段中,您只需要至少一个couchbase节点的IP。除此之外,您将获得Cluster(使用CouchbaseCluster.create(...))。 然后使用Bucket打开cluster.openBucket(bucketName)。这应该非常像:

//TODO make both of these singletons
Cluster cluster = CouchbaseCluster.create("192.168.100.111", "127.0.0.1:8091"); 
Bucket bucket = cluster.openBucket(bucketName, bucketPassword);

注意ClusterBucket是线程安全的,应该用作单身,而不是像在makeMembaseCacheEntry和{{getMembaseCacheEntry中那样在每次调用时重新打开1}} ...

为了让你需要包裹你的value

Document doc = SerializableDocument.create(key, expiry, value);
bucket.upsert(doc);

(如果您想要创建或替换,请使用upsert,请参阅其他类型的kv操作的文档)

对于get,您需要告诉存储桶它反序列化一个Object:

SerializableDocument doc = bucket.get(key, SerializableDocument.class);
Object value = doc.content();