2012-01-05 66 views
1

我們有2個應用程序服務器(coldfusion/Java)和一個memcached。 我想設置我的memcached服務器/客戶端。當服務器1爲鍵添加值時,它也應該可用於服務器2.並且以相反的方式。許多客戶端的一個Memcached服務器

現在,當我對服務器1鍵增加價值它不是第二個服務器上可讀或可編輯的。 如何設置它

我使用spymemcached作爲客戶端庫。

感謝您的幫助

+0

首先,我想指出,雙方Memcached和spymemcached是非常可靠的,每天使用的成千上萬的人。你也試圖做一些非常基本的事情,在測試過程中很容易被捕獲,或者使用spymemcached或memcached,這導致我相信你的代碼中存在一個錯誤。你能在這裏發佈代碼嗎?另外,如果您使用的是2.7系列的spymemcached,您可以調用Future中的getStatus()函數返回給您,以查看請求中是否有錯誤。 – mikewied 2012-01-06 18:21:44

回答

0

一切都在正確的方式設定,但是設定的複數值(結構或陣列)由這些鍵/值對其他服務器不可用。 現在我將我的所有值序列化爲JSON並且工作正常。也許在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和服務器2相同的對象相同的密鑰。

OR

B.你不是說要同memcached的實例服務器1和服務器2

OR

C.你給了這麼短的壽命,它過期的對象在其他服務器可以利用它之前。

+0

A - 密鑰相同B - 只有一個memcache C實例 - 壽命爲3600,並且值在第一臺服務器上可用 – Bonanza 2012-01-05 18:58:45

+0

我聲稱存在某處的錯誤。假設你正在使用Memcached和Spymemcached的穩定版本,這並沒有留下太多的擺動空間。我會退後一步,回到基礎。用一個插入/檢索值的main創建一個簡單的Java類。在不同的機器上運行它以確保它能正常工作。使用Wireshark絕對確保您傳遞的是同一個密鑰。使用可用於memcached的命令行工具來檢查內容。例如,從兩臺服務器插入相同的值並運行「統計信息項目」。它有1個鍵還是2個? – rfeak 2012-01-05 19:09:58

+0

只有一個ke,現在'測試'。我在一臺服務器上插入值,另一臺服務器上的值是'未定義的'。當我嘗試使用其他服務器上的ADD覆蓋它時,我收到狀態'OperationStatus成功= false:NOT_STORED'。 – Bonanza 2012-01-05 19:17:43

0

它看起來就像是一個相當年輕的Memcached實現,這可能是一個錯誤。您可能想要在此處提交它:http://code.google.com/p/spymemcached/issues/list

如果您不認爲這是一個錯誤,您可以發佈調用Memcached的代碼片段嗎?

另外,請記住,memcached的應被視爲不可靠和非持久性存儲。您應該編寫代碼,就好像您期望它停止一樣,甚至可能會返回空結果。

+0

這可能是memcached引擎舊版本中的錯誤嗎?我在Windows下使用它,只有我發現的工作版本是1.2.4(如果我記得不錯) – Bonanza 2012-01-05 19:00:52

相關問題