java - 谷歌应用引擎中出现 'Policy prevented put operation'的原因是什么?

标签 java google-app-engine memcached

将数据放入缓存时会记录以下异常。

com.google.appengine.api.memcache.stdimpl.GCacheException: Policy prevented put operation

缓存中存储的数据:

Map<String, List<Dependents>> dependentMap = new HashMap<String,List<Dependents>>();

map 键中将有一个 ID,每个 ID 将有 0 个或多个对象(最多 5 个对象)。

map 大小为:

dependentMap.size() = 1500 approximately

策略已设置为 MemcacheService.SetPolicy.SET_ALWAYS,这是默认值。

它工作正常,但当通过调用 clear() 方法清除缓存时出现问题。

是什么原因以及如何解决这个问题?

最佳答案

如果 dependentMap.size() 为 1500 并且每个列表最多包含 5 个对象,那么您将在单个数据结构中存储最多 7500 个对象,对吗?情况可能是这样的,根据您的数据加上 Java 维护的内部数据表示,这个 Map 大于 1MB。

根据 Google App Engine 配额/限制,您无法将任何大于 1MB 的数据结构存储到内存缓存或数据存储区中。这就是您收到异常的原因 - Google 由于其大小而不允许将此 Map 插入到 Memcache 中。我认为调用 clear() 与您的问题没有任何关系。

关于java - 谷歌应用引擎中出现 'Policy prevented put operation'的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3386831/

相关文章:

python - django 缓存 session

Java:从文本文件中检索和删除随机行

java - 在 StringTemplate 电子邮件中使用 css

python - Google App Engine - 为特定网址编写 app.yaml,如 applicationName.appspot.com/docs/ec-quickstart/index.html

mysql - 使用mysql客户端连接云sql实例

java - 有人用GAE进行Nat遍历吗? (作为保存映射的服务器)

mysql - 如何存储MySQL的结果以便以后排序

java - 使用库编译项目时,java 中未找到类错误

Java 迭代列表 <?扩展通量>

codeigniter - 在codeigniter 2.1.0中配置memchaced