繁体   English   中英

在 SuiteScript 2.0 中使用 N/Cache 模块

[英]Using the N/Cache Module in SuiteScript 2.0

我正在尝试在自定义模块中实现 N/cache 模块的使用,以跨包保留数据,而无需每次需要数据时都从远程源检索数据。 所以我创建了这个来获取缓存数据:

function data_GetCachedData() {
    var remoteInfo = null;
    require(['N/cache'], function (cache) {
        var rmtCache = cache.getCache({
                name : _REMOTE_CACHE_NAME
            ,   scope : cache.Scope.PROTECTED
        });
        remoteInfo = rmtCache.get({
                key : _REMOTE_CACHE_INDEX
            ,   loader : comms_ObtainRemoteData(params)
        });
    });
    return JSON.parse(remoteInfo || "{ }");
}

我将其添加为加载程序:

function comms_ObtainRemoteData(params) {
    var remoteData = null;
    /*
        make HTTPS calls to remote server to add values to 'remoteData'
    */
    
    require(['N/cache'], function (cache) {
        var rmtCache = cache.getCache({
                name : _REMOTE_CACHE_NAME
            ,   scope : cache.Scope.PROTECTED
        });
        ptCache.put({
                key : _REMOTE_CACHE_INDEX
            ,   value : remoteData.values
            ,   ttl : (18 * 60 * 60)
        });
    });
    
    return remoteData.values;
}

但是,我添加了一些日志记录,每次调用 GetCachedData 时,它总是会触发加载程序。 这有什么我想念的吗? 因为据我所知,这样做应该很好,而不必总是调用加载程序。

您的脚本每次都调用远程 function,因为您在带有参数的加载程序 function 之后放置了括号。 请参阅此行loader: comms_ObtainRemoteData(params)如果您将其更改为loader: comms_ObtainRemoteData那么您应该没问题。 cache.get 的“loader”选项需要 function 的名称,而不是 function 调用的返回结果。

我遇到了同样的问题,不得不切换代码。 以下是您的代码示例:

 var rmtCache = cache.getCache({ name: _REMOTE_CACHE_NAME, scope: cache.Scope.PROTECTED }); if (rmtCache==null){ rmtCache = remoteData.values ptCache.put({ key: _REMOTE_CACHE_INDEX, value: rmtCache, ttl: (18 * 60 * 60) }); }

正如 NetSuite 明确指出的那样

不能保证缓存值在 ttl 值的整个持续时间内都保留在缓存中。 ttl 值表示可以存储缓存值的最长时间。

所以可能是由于资源紧缩(可能是由于在所述帐户中运行多个脚本/缓存)或缓存因未及时使用/请求而失效,它可以从 memory 重置/清除。

另外,您是否在测试(Dev/Sandbox)环境中测试您的脚本? 由于与生产环境相比,测试环境的资源有限。

我在我的开发环境中多次遇到同样的问题,但它似乎在生产环境中运行良好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM