【问题标题】:What objects allowed in GAE MemcacheGAE Memcache 中允许哪些对象
【发布时间】:2018-11-16 22:16:03
【问题描述】:

我正在尝试了解哪些对象可以存储在 Java Memcache 中但无法找到直接答案。

我尝试的是在 Memcache 中存储一个 ConcurentHashMap,其中 ConcurentHashMap 的每个值都是另一个 ConcurentHashMap,最多 5 个级别。

这是之前的设计,我希望尽可能少地进行更改。

然而,我发现了一个奇怪的问题:

java.lang.IllegalArgumentException:不能用作值: 'com.xx.xxxx@1a55d9d' 在 com.google.appengine.api.memcache.AsyncMemcacheServiceImpl.serializeValue(AsyncMemcacheServiceImpl.java:283) 在 com.google.appengine.api.memcache.AsyncMemcacheServiceImpl.doPut(AsyncMemcacheServiceImpl.java:516) 在 com.google.appengine.api.memcache.AsyncMemcacheServiceImpl.put(AsyncMemcacheServiceImpl.java:591) 在 com.google.appengine.api.memcache.MemcacheServiceImpl.put(MemcacheServiceImpl.java:79)

我在一个类中嵌入了一个 ConcurrentHashMap 并将它传递给 Memcache。使用普通的 ConcurrentHashMap 我也遇到了同样的问题。

我查看了不同的论坛,但无法找到有关哪些对象可以存储在 Memcache 中的答案,尤其是来自 java 集合和此类对象 (ConcurrentHashMap)。我可以在 Memcache 中保存哪些类型的复杂 java 对象?

我的另一个问题是,当我在 GAE 上再次部署新版本时会发生什么?之前存储在 Memcache 中的值是否被销毁?

【问题讨论】:

  • 关于此主题的更新:1. ConcurrentHashMap 实现了 Serializeable,因此无事可做 2. 注意到 Vectors 是允许的 .. 所以我们正在调整代码以包含 Vectors

标签: java google-app-engine


【解决方案1】:

Memcache 通常允许任何可序列化的对象。类需要实现 Serializable 才能让 Java 处理序列化。在存储集合或其他数据结构的情况下,数据结构中的对象也需要可序列化。

public class MyClass implements Serializable { }

您应用的所有版本共享同一个内存缓存。缓存是全局的,并在应用程序的前端、后端及其所有服务和版本之间共享。见Appengine Memcache

【讨论】:

  • 对不起...最后一句话的文档? “您应用的所有版本共享同一个内存缓存。”
  • ConcurrentHashMap 已经实现了。请您在闲暇时查看。
猜你喜欢
  • 2018-02-07
  • 1970-01-01
  • 2012-10-27
  • 2010-12-30
  • 1970-01-01
  • 2014-11-16
  • 2011-05-08
  • 2013-01-19
相关资源
最近更新 更多