我有putAll() method的Google缓存脚本脚本有问题。该方法似乎可行,但仅适用于前(〜100)对
在我的脚本中,我必须缓存大量的行(〜2500 * 3),每行使用不同的键,,然后发现缓存服务出现故障。为了确定问题,我写了simple code
function myFunction() {
var cache = CacheService.getScriptCache();
var toCache = {};
for (var i = 0; i < 2000; i++){
toCache["key"+i] = "value"+i;
}
cache.putAll(toCache);
var tmp;
for (var i = 0; i < 2000; i+=10){
var a = cache.get("key"+i);
if (a == null) { tmp = "key"+i; break; }
}
tmp = tmp;
}
与过去一样,缓存服务似乎是不可预测的,并且在处理过程中不会处理错误。将缓存与多个调用放在一起比较慢,并且不能确保将来不会更改该限制,因为文档中甚至没有提到该限制...
谢谢
答案 0 :(得分:4)
这个答案怎么样?我认为可能有几种方法。因此,请将此视为其中之一。
根据您的情况,当i
为100时,a
返回null
。这样,for循环结束。使用以下脚本时,发现CacheService中的属性超过100个。
var cache = CacheService.getScriptCache();
var toCache = {};
var keys = [];
for (var i = 0; i < 2000; i++) {
var key = "key" + i;
keys.push(key);
toCache[key] = "value" + i;
}
cache.putAll(toCache);
var r = cache.getAll(keys);
Logger.log(keys.length) // 2000
Logger.log(Object.keys(r).length) // 900
但是还发现,尽管推送了2,000个属性,但仅检索了900个属性。而且我找不到丢失的属性的规律性。从这个结果来看,我认为可能存在最多可以推送的属性。
作为一个实验,我调查了检索到的属性的数量随推送属性的数量增加而增加的情况。每个属性都被立即推送。下图是结果。
根据该图,对于上述脚本,发现900个属性是一次可以推送的最大属性数。这不取决于小于100 KB的值的大小。另外,可以获得以下几点。
这些结果与CacheService.getScriptCache()
,CacheService.getUserCache()
和CacheService.getDocumentCache()
相同。但是CacheService.getScriptCache()
,CacheService.getUserCache()
和CacheService.getDocumentCache()
的每种方法都可以用作单独的存储。因此,当使用3种方法时,可以使用3,000个属性。
CacheService.getScriptCache()
,CacheService.getUserCache()
和CacheService.getDocumentCache()
的方法相互独立。
CacheService.getScriptCache()
,CacheService.getUserCache()
和CacheService.getDocumentCache()
时,可以使用3,000个属性。根据以上结果,当您按下“〜2500 * 3”的属性时,以下解决方法如何?
CacheService.getScriptCache()
,CacheService.getUserCache()
和CacheService.getDocumentCache()
的方法。
我认为可以结合使用这些属性将“〜2500 * 3”的属性推入CacheService。
CacheService.getDocumentCache()
时,请使用容器绑定脚本。如果已经报告了上述结果,并且/或者这不是您想要的,