【发布时间】: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