2012-04-16 65 views
3

我可以從Go寫入memcache並從Java(在appengine上)讀取它嗎?使用Go和Java在Gae上共享Memcache

從memcache查看器看來,答案是否定的,因爲有「Java string」和「Go string」類型的鍵。怎麼分享[]字節?

Web掛鉤和數據存儲在Appengine上的Java和Go之間進行通信的唯一方式嗎?

感謝

+1

只需考慮您如何與Go和Java應用程序中的memcache進行通信。 – alphazero 2012-04-17 00:30:29

+0

+1 @alphazero。這似乎是分享信息的不誠實的方式。 – Ashe 2012-04-17 02:24:22

+0

我不關注。 @alphanzero,Go中的Item類型將Value存儲爲[]字節,不應該Java應用程序能夠讀取它?也許使用低級別的API ..我沒有看到它記錄了memcache不在不同語言版本之間共享。 – 2012-04-17 03:26:22

回答

2

我不知道回答你的問題,但你會發現MemcacheSerialization.java它的一部分的方法makePbKey。這顯示了Java如何獲取對象並將其作爲關鍵字。

同樣,在文件appengine/memcache/memcache.go中,您可以看到AppEngine for Go如何使Item.Key(類型字符串)中的某個鍵失效。請參閱GetMulti,其中每個密鑰都通過簡單轉換從字符串轉換爲[]字節。

因此,您的問題的最終答案取決於您通過mkPbKey和GetMulti找到一個路徑,這會導致相同的密鑰。在我看來,如果你給Java一個String類型的鍵,並且它的長度小於250,並且你記得在你的鍵之前和之後放上「」,它可能會起作用。 (但是閱讀mkPbKey讓我想知道它是如何對一個有200個代碼點的字符串作出反應,所有這些都導致了UTF-8中的多字節編碼,看起來像它會產生比他們期望的更大的密鑰。)

+0

您是對的,使用Go Key中的引號可以訪問由Java編寫的字符串。使用Memcache Viewer創建[key,value]爲[「a」,abc]的Go項,可以使用等於[a]的[key]將其作爲Java String讀取。我仍然需要在代碼中進行測試,謝謝。 – 2012-04-17 13:33:28