gpt4 book ai didi

javascript - CacheService.putAll 忽略超过某个值的键

转载 作者:行者123 更新时间:2023-11-30 09:17:42 27 4
gpt4 key购买 nike

我对 putAll() method 有疑问用于脚本的谷歌缓存。该方法似乎有效,但仅适用于前(~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;
}

与过去一样,缓存服务似乎是不可预测的,并且在处理过程中不处理错误。使用多个调用放置缓存速度较慢,并且不能确保将来限制不会改变,因为文档中甚至没有提到它......

谢谢

最佳答案

这个答案怎么样?我认为可能有几种方法。因此,请将此视为其中之一。

在您的情况下,当 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

但也发现虽然推送了2000个属性,但只检索到了900个属性。而且我找不到丢失的属性的规律性。从这个结果中,我认为可以推送的属性数量可能是最大的。

实验:

作为一个实验,我调查了随着推送属性数量的增加检索到的属性数量。每个属性都被立即推送。下图是结果。

enter image description here

从图中可以看出,对于上述脚本,900 个属性是一次可以推送的最大属性数。这不取决于小于 100 kBytes 的值的大小。还可以获得以下几点。
  • 推送 1 到 900 的属性时,可以正确检索到所有属性。
  • 推送 1000 个属性时,检索到 1-900 个属性。无法检索 900 之后的属性。认为这些属性没有被推送。
  • 推送 2,000 个属性时,检索到 900 个属性。但我找不到它们的规律性。
  • 使用键名“keyA1,keyA2,keyA3,,”推送900个属性后,使用键名“keyB1,keyB2,keyB3,,”推送100个属性时,可以正确检索1000个属性。
  • 但是在使用键名“keyA1,keyA2,keyA3,,”推送 900 个属性后,当使用键名“keyB1,keyB2,keyB3,,”推送 101 个属性时,仅检索到 900 个属性。在这种情况下,“keyA”的属性被“keyB”的 101 个属性覆盖。

  • 这些结果与 CacheService.getScriptCache() 相同。 , CacheService.getUserCache()CacheService.getDocumentCache() .但是 CacheService.getScriptCache()的每个方法, CacheService.getUserCache()CacheService.getDocumentCache()可作为个人存储使用。所以当使用 3 种方法时,可以使用 3,000 个属性。

    概括:
  • 一次可以推送的最大属性数为 900。
  • 推送900个属性后添加100个属性,可以保存1000个属性。
  • 认为这是最大数量。
  • CacheService.getScriptCache()的方法, CacheService.getUserCache()CacheService.getDocumentCache()独立的。
  • CacheService.getScriptCache() , CacheService.getUserCache()CacheService.getDocumentCache()使用时,可以使用 3,000 个属性。

  • 解决方法:

    从上面的结果来看,当你推送“~2500 * 3”的属性时,下面的解决方法如何?
  • 为一个属性设置多个值。
  • The maximum size of a property is 100 kBytes .
  • CacheService.getScriptCache()的使用方法, CacheService.getUserCache()CacheService.getDocumentCache() .
  • 这样,可以使用 3,000 个属性。

  • 我认为可以通过这些组合将“~2500 * 3”的属性推送到CacheService。

    笔记:
  • 当您使用 CacheService.getDocumentCache() ,请使用容器绑定(bind)脚本。
  • 在这份报告中,我用我的帐户确认。我不确定其他用户的所有结果是否都相同。我很抱歉这种情况。

  • 引用:
  • CacheService

  • 如果上述结果已被报告和/或这不是您想要的,我很抱歉。

    关于javascript - CacheService.putAll 忽略超过某个值的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53942649/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com