谷歌应用引擎中“政策阻止投入操作”的原因是什么?

时间:2010-08-02 10:21:53

标签: 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>>();

在地图中,键将是一个ID,每个ID将有0个或更多个对象(最多5个对象)。

地图尺寸为:

dependentMap.size() = 1500 approximately

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

工作正常,但是通过调用clear()方法清除缓存时问题就开始了。

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

1 个答案:

答案 0 :(得分:1)

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

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