将数据放入缓存时会记录以下异常。
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()
方法清除缓存时问题就开始了。
是什么原因以及如何解决问题?
答案 0 :(得分:1)
如果dependentMap.size()
为1500且每个列表最多包含5个对象,那么您在一个数据结构中最多可存储7500个对象,对吗?可能的情况是,使用您的数据+ Java维护的内部数据表示,此Map
大于1MB。
根据Google App Engine配额/限制,您无法将任何大于1MB的数据结构存储到内存缓存或数据存储中。这就是你得到例外的原因 - 由于它的大小,谷歌不允许将此Map
插入到Memcache中。我不认为调用clear()
与您的问题有任何关系。