2017-03-21 14 views
0

내 membase 서버에 연결하기 위해 aspymemcached 클라이언트를 사용하고있었습니다. 코드 모양처럼 :membase 서버와 couchbase 서버 마이그레이션 : Java 클라이언트

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 클라이언트 자바 API (Ref : http://docs.couchbase.com/developer/java-2.1/java-intro.html)를 사용해야합니다. cousebase 클라이언트에서 모든 작업이 된 JSONObject 심판 수행 : 그래서

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

가 어떻게 당신이 저장하는 것은 직렬화 Object 경우 클라이언트에게

+0

주의를, 최신 자바 클라이언트 2.4입니다 최신 문서는 https://developer.couchbase.com/documentation/server/4.6/sdk/java/start-using-sdk.html입니다 (이전 버전과 두 가지 버전의 서로 다른 문서에 링크되어 있습니다) –

답변

1

을 카우치베이스 주식회사 두 가지 방법 위에 마이그레이션 할 수 있습니다, 자바 SDK가 제공하는 SerializableDocument 유형 (https://developer.couchbase.com/documentation/server/4.6/sdk/java/document-operations.html#story-h2-10 참조).

spymemcached의 맨 위에 구축 된 1.x 클라이언트에 저장된 Object와 호환되지만 플래그 메타 데이터를 사용하며 Memcached에서 Couchbase 로의 마이그레이션이 이러한 영향을 미칠지 잘 모르겠습니다. 어떤 시점에서 코드 마이그레이션).

Spymemcached와 비교하여 Couchbase SDK 2.x에는 Couchbase Cluster 조직에 더 가까운 API가 있습니다. Cluster에 연결하기 시작합니다. 여기에서 Bucket을 열어서 다음과 같은 키/값 연산을 수행 할 수 있습니다. get, update, insert, upsert.

첫 번째 발췌 문장에는 적어도 하나의 couchbase 노드의 IP 만 필요합니다. 그 중 Cluster (CouchbaseCluster.create(...) 사용)이 표시됩니다. cluster.openBucket(bucketName)을 사용하여 Bucket을 엽니 다. 즉해야한다 거의 같은 : ClusterBucket는 스레드 안전하고 는 싱글보다는 당신이 makeMembaseCacheEntrygetMembaseCacheEntry에서처럼 각 호출에 다시 열을 표기하고 있습니다

//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); 

주 ...

메이크업를 들어 당신이 포장해야합니다 귀하의 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(); 
+0

'SerializableDocument'를 시도했지만 서버에'Object'를 저장하고 있어도 작동하지 않습니다.당신은'makeMembaseCacheEntry'에 대한 메소드 서명을 볼 수 있고'Object'는'Serializable'이 아닙니다. 예 :'public static void makeMembaseCacheEntry (final String key, final int expiryTime, final Object value, final String bucketName)'컴파일 에러가 발생했습니다 :'BinaryDocument 타입의 메소드 create (String, int, ByteBuf)는 arguments (String, int, Object)' –

+0

당신이 사용할 수있는'Serializable'라는 더 구체적인 기본 유형이 없습니까? 또한, 컴파일 오류가'SerializableDocument'가 아닌'BinaryDocument.create'를 사용했다는 것을 나타내는 것 같습니다 –

+0

당신이 사용할 수있는 Serializable 인보다 구체적인 기본 유형이 없습니까? > 내 API 사용자가 내 인수에'Object' 유형을 넣는 이유 인 모든 유형의 객체를 저장할 수 있기 때문에 메소드를'Serializable' 유형으로 제한 할 수 있습니다. 이것은 spymemcached java clinye로 잘 작동합니다 –