2012-01-05 2 views
1

우리는 2 개의 어플리케이션 서버 (coldfusion/Java)와 1 개의 memcached를 가지고 있습니다. 그런 memcached 서버/클라이언트를 설치하고 싶습니다. 서버 1이 키 값을 추가하면 서버 2에서도 사용할 수 있어야합니다. 반대의 경우도 마찬가지입니다.많은 클라이언트를위한 하나의 Memcached 서버

이제 서버 1의 키 값을 추가하면 두 번째 서버에서 읽을 수 없거나 편집 할 수 없습니다. 설정 방법

나는 클라이언트 라이브러리로 spymemcached을 사용합니다. 당신은 동일한 개체에 대한 서버 1과 서버 2에 대해 동일한 키를 사용하지 않는

A. : 당신의 도움이

+0

우선 둘 다 memcached를하고 spymemcached 매우 안정하고 매일 수천명의 사람을 사용하는 점에 유의하고 싶다. 또한 테스트 중에 쉽게 잡힐 수있는 아주 기본적인 것을하려고하거나 spymemcached 또는 memcached를 사용하면 코드에 버그가 있음을 알게됩니다. 여기에 코드를 게시 할 수 있습니까? 또한 2.7 시리즈의 spymemcached를 사용하는 경우 Future에서 getStatus() 함수를 호출하여 요청에 오류가 있는지를 확인할 수 있습니다. – mikewied

답변

0

모든 것이 올바른 방법으로 설정되었지만 복잡한 값 (구조 또는 배열)을 설정하면 해당 키/값 쌍을 다른 서버에서 사용할 수 없게됩니다. 이제 모든 값을 JSON으로 serialize하고 제대로 작동합니다. 아마도 Memcached 버전 1.4.5에서는 변경되었지만 버전 1.2.6에서는 값을 직렬화하는 것이 수정 방법입니다.

<!--- Setting up Memcached Client ---> 
<!--- Add code in OnApplicationStart in Application.cfc ---> 
<cfset AU = createObject("java", "net.spy.memcached.AddrUtil").init() /> 
<cfset Application.MemCacheD = createObject("java", "net.spy.memcached.MemcachedClient").init(AU.getAddresses("127.0.0.1:11211")) /> 
<!--- Adding values: ---> 
<cfset memCacheName = "myKey" /> 
<cfset myValue = StructNew() /> 
<cfset myValue['var1'] = 'var1 value' /> 
<cfset Application.MemCacheD.add(memCacheName, 3600, serializeJSON(myValue)) /> 
<!--- Getting values: ---> 
<cfset memCacheName = "myKey" /> 
<cfset MemCachedRet = Application.MemCacheD.get(memCacheName) /> 
<cfif isDefined('MemCachedRet')> 
    <!--- value is available from mamcached ---> 
<cfelse> 
    <!--- get value from db and save to memcached ---> 
</cfif> 
0

중 하나에 대한

감사합니다. 당신은 서버 1과 서버에 대해 동일한 memcached와 인스턴스에 이야기되지 않은

또는

B. 2

또는

C. 당신이 만료되는 객체에 짧은 수명을했다

다른 서버가이를 활용할 수 있습니다.

+0

A - 키가 동일합니다. B - memcache 인스턴스가 하나뿐입니다. C - 수명이 3600이고 첫 번째 서버에서 값을 사용할 수 있습니다. – Bonanza

+0

어딘가에 버그가 있다고 주장합니다. Memcached 및 Spymemcached의 안정적인 릴리스를 사용한다고 가정하면 많은 흔들림이 생기지 않습니다. 나는 뒤로 물러 설 것이며 기본으로 돌아갈 것이다. 기본 값을 삽입/검색하는 간단한 Java 클래스를 만듭니다. 다른 컴퓨터에서 실행하여 제대로 작동하는지 확인하십시오. Wireshark를 사용하면 동일한 키를 전달하고 있음을 절대적으로 확신 할 수 있습니다. memcached에 사용할 수있는 명령 줄 도구를 사용하여 내용을 확인하십시오. 예를 들어, 두 서버에서 동일한 값을 삽입하고 "통계 항목"을 실행하십시오. 1 키 또는 2 키가 있습니까? – rfeak

+0

이제는 '테스트'에 대해 단 하나의 애널리스트 만 있습니다. 하나의 서버에 값을 삽입하고 다른 값은 '정의되지 않음'입니다.다른 서버에서 ADD를 사용하여 덮어 쓰려고하면 'OperationStatus success = false : NOT_STORED'상태가 나타납니다. – Bonanza

0

오히려 젊은 Memcached 구현 인 것 같습니다. 이것은 버그 일 수 있습니다. 여기에 제출할 수도 있습니다 : http://code.google.com/p/spymemcached/issues/list

버그라고 생각하지 않는다면 Memcached를 호출하는 코드 스 니펫을 게시 할 수 있습니까?

또한 memcached는 신뢰할 수없고 비 영구적 인 저장소로 처리되어야합니다. 코드가 아래로 내려갈 것으로 예상하고 심지어 빈 결과로 되돌아 오는 것처럼 코드를 작성해야합니다.

+0

memcached 엔진의 이전 버전에서 버그가 될 수 있습니까 ?? 내가 창문 아래에서 그것을 사용하고 내가 발견 한 작업 버전은 1.2.4이다 (잘 기억한다면) – Bonanza