membase 服务器到 couchbase 服务器迁移:Java 客户端
membase server to couchbase server migration : Java client
我正在使用 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 客户端
如果您存储的是序列化的 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
,您可以对其执行 key/value 操作,例如 get
、update
、insert
、upsert
.
在您的第一个片段中,您只需要至少一个 couchbase 节点的 IP。从中你会得到一个 Cluster
(使用 CouchbaseCluster.create(...)
)。
然后使用 cluster.openBucket(bucketName)
打开 Bucket
。那应该很像:
//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);
注意 Cluster
和 Bucket
是线程安全的, 应该用作单例 而不是像在 [=27] 中那样在每次调用时重新打开=] 和 getMembaseCacheEntry
...
对于 make 你需要包装你的 value
:
Document doc = SerializableDocument.create(key, expiry, value);
bucket.upsert(doc);
(如果要创建或替换,请使用 upsert
,其他类型的 kv 操作请参阅文档)
对于 get,您需要告诉存储桶它反序列化了一个对象:
SerializableDocument doc = bucket.get(key, SerializableDocument.class);
Object value = doc.content();
我正在使用 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 客户端
如果您存储的是序列化的 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
,您可以对其执行 key/value 操作,例如 get
、update
、insert
、upsert
.
在您的第一个片段中,您只需要至少一个 couchbase 节点的 IP。从中你会得到一个 Cluster
(使用 CouchbaseCluster.create(...)
)。
然后使用 cluster.openBucket(bucketName)
打开 Bucket
。那应该很像:
//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);
注意 Cluster
和 Bucket
是线程安全的, 应该用作单例 而不是像在 [=27] 中那样在每次调用时重新打开=] 和 getMembaseCacheEntry
...
对于 make 你需要包装你的 value
:
Document doc = SerializableDocument.create(key, expiry, value);
bucket.upsert(doc);
(如果要创建或替换,请使用 upsert
,其他类型的 kv 操作请参阅文档)
对于 get,您需要告诉存储桶它反序列化了一个对象:
SerializableDocument doc = bucket.get(key, SerializableDocument.class);
Object value = doc.content();