【问题标题】:Sharing Memcache on Gae with Go and Java使用 Go 和 Java 在 Gae 上共享 Memcache
【发布时间】:2012-04-28 07:05:13
【问题描述】:

我可以从 Go 写入内存缓存并从 Java 读取(在 appengine 上)吗?

从 memcache 查看器看来答案是否定的,因为有“Java 字符串”和“Go 字符串”类型的键。共享 []byte 怎么样?

Web-hook 和数据存储是 Java 和 Appengine 上 Go 之间通信的唯一方式吗?

谢谢

【问题讨论】:

  • 想想你是如何从你的 Go 和 Java 应用程序与 memcache 通信的......
  • +1 @alphazero。这似乎是一种不诚实的信息共享方式。
  • 我不关注。 @alphanzero,Go 中的 Item 类型将 Value 存储为 []byte,Java 应用程序不应该能够读取它吗?也许使用低级 api.. 我还没有看到它记录 memcache 不在(不同语言的)版本之间共享。
  • @NickSiderakis 不,相反,这是一种在 Go 和 Java 应用程序之间共享信息的奇怪方式。
  • 在 memcache Java API 中,键和值的类型为 Object

标签: google-app-engine memcached go


【解决方案1】:

我不知道你的问题的答案,但你会在MemcacheSerialization.java 的方法 makePbKey 中找到它的一部分。这显示了 Java 如何获取一个对象并从中生成一个键。

同样,在 appengine/memcache/memcache.go 文件中,您可以看到 AppEngine for Go 如何从 Item.Key(类型字符串)中生成密钥。请参阅 GetMulti,其中每个键都通过简单的强制转换从字符串转换为 [] 字节。

因此,您问题的最终答案取决于您找到一条通过 mkPbKey 和 GetMulti 的路径,该路径会产生相同的密钥。在我看来,如果您给 Java 一个 String 类型的键,并且它的长度小于 250,并且您记得在 Go 中的键之前和之后放置“”,它可能会起作用。 (但阅读 mkPbKey 让我想知道它如何对包含 200 个代码点的字符串做出反应,所有这些都会导致 UTF-8 中的多字节编码。似乎它会产生比预期更大的密钥。)

【讨论】:

  • 你是对的,使用 Go Key 中的引号可以访问 Java 编写的字符串。使用 Memcache 查看器创建 [key, value] 为 ["a", abc] 的 Go 条目,可以使用等于 [a] 的 [key] 将其作为 Java 字符串读取。我仍然需要在代码中对其进行测试,谢谢。
猜你喜欢
  • 2012-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多