java - GAE Memcache 中允许哪些对象
问题描述
我试图了解哪些对象可以存储在 Java Memcache 中,但无法找到直接答案。
我尝试的是在 Memcache 中存储一个 ConcurentHashMap,其中 ConcurentHashMap 的每个值都是另一个 ConcurentHashMap,最多 5 个级别。
这是之前的设计,我想尽可能少地进行必要的更改。
但是,我发现了一个奇怪的问题:
java.lang.IllegalArgumentException:不能用作值:com.google.appengine.api.memcache.AsyncMemcacheServiceImpl.serializeValue(AsyncMemcacheServiceImpl.java:283) 处 com.google.appengine.api 处的“com.xx.xxxx@1a55d9d”。 memcache.AsyncMemcacheServiceImpl.doPut(AsyncMemcacheServiceImpl.java:516) 在 com.google.appengine.api.memcache.AsyncMemcacheServiceImpl.put(AsyncMemcacheServiceImpl.java:591) 在 com.google.appengine.api.memcache.MemcacheServiceImpl.put(MemcacheServiceImpl.爪哇:79)
我在一个类中嵌入了一个 ConcurrentHashMap 并将其传递给 Memcache。使用普通的 ConcurrentHashMap 我也遇到了同样的问题。
我查看了不同的论坛,但无法找到有关哪些对象可以存储在 Memcache 中的答案,尤其是来自 Java 集合和此类对象(ConcurrentHashMap)。我可以在 Memcache 中保存哪些类型的复杂 java 对象?
我的另一个问题是,当我在 GAE 上再次部署新版本时会发生什么?之前存储在 Memcache 中的值是否已销毁?
解决方案
Memcache 通常允许任何可序列化的对象。类需要实现 Serializable 才能让 Java 处理序列化。在存储集合或其他数据结构的情况下,数据结构中的对象也需要可序列化。
public class MyClass implements Serializable { }
您的应用程序的所有版本共享相同的内存缓存。缓存是全局的,并在应用程序的前端、后端及其所有服务和版本之间共享。请参阅Appengine 内存缓存
推荐阅读
- javascript - 在角度 8 的自定义方法中调用拦截
- python - 如何在熊猫中使用用户定义的函数根据列值和时间戳返回值
- html - 当我指向鼠标时,CSS悬停不起作用 - 没有任何反应
- node.js - 带有对象数组的猫鼬 updateMany
- python - 数据框行的条件合并
- java - Firebase 消息 android 通知没有声音或优先级
- python - 加速 Pandas DataFrame 过滤器
- firebase - 谷歌(gmail登录)在颤动
- arrays - 重用 uint8_t 缓冲区来存储 UART 响应
- malloc - 为什么 malloced 字符串不适用于 strcat?