我试图了解哪些对象可以存储在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中的值是否已销毁?
答案 0 :(得分:0)
Memcache通常会允许任何可序列化的对象。类需要实现Serializable以使Java处理序列化。在存储集合或其他数据结构的情况下,数据结构中的对象也需要是可序列化的。
public class MyClass implements Serializable { }
您应用的所有版本都共享相同的内存缓存。缓存是全局的,并在应用程序的前端,后端及其所有服务和版本之间共享。见Appengine Memcache