2017-02-16 31 views
2

我正在开发一个带有模块的ColdBox应用程序,并希望使用它的缓存功能来缓存视图一段时间。为什么ColdBox应用程序中renderView()的cacheTimeout设置不起作用?

component{ 
    property name="moduleConfig" inject="coldbox:moduleConfig:mymodule"; 

    ... 

    function widget(event, rc, prc){ 
    var viewData = this.getData(); 

    return renderView(
     view = "main/widget", 
     args = viewData, 
     cache = true, 
     cacheSuffix = ":" & moduleConfig.entryPoint, 
     cacheTimeout = 2 
    ); 
    } 
} 

我试图通过添加以下信息到我的Cachebox.cfc设置默认的缓存配置和除去从上面的代码中cacheTimeout

cacheBox = { 
    defaultCache = { 
    objectDefaultTimeout = 1, //two hours default 
    objectDefaultLastAccessTimeout = 1, //30 minutes idle time 
    useLastAccessTimeouts = false, 
    reapFrequency = 5, 
    freeMemoryPercentageThreshold = 0, 
    evictionPolicy = "LRU", 
    evictCount = 1, 
    maxObjects = 300, 
    objectStore = "ConcurrentStore", //guaranteed objects 
    coldboxEnabled = false 
    }, 

    caches = { 
    // Named cache for all coldbox event and view template caching 
    template = { 
     provider = "coldbox.system.cache.providers.CacheBoxColdBoxProvider", 
     properties = { 
     objectDefaultTimeout = 1, 
     objectDefaultLastAccessTimeout = 1, 
     useLastAccessTimeouts = false, 
     reapFrequency = 5, 
     freeMemoryPercentageThreshold = 0, 
     evictionPolicy = "LRU", 
     evictCount = 2, 
     maxObjects = 300, 
     objectStore = "ConcurrentSoftReferenceStore" //memory sensitive 
     } 
    } 
    } 
}; 

虽然这没有任何影响缓存。我也尝试将上面的配置添加到我的Coldbox.cfc中。

即使我通过coldbox create app MyApp通过CommandBox创建一个完全新的测试程序,然后只设置在Cachebox.cfc的缓存为1分钟,在Coldbox.cfc设置viewCaching = true,并在Main.cfc设置event.setView(view="main/index", cache=true),它不没有按预期工作。

无论我做什么,该视图总是缓存至少5分钟。

有什么我失踪?

+0

您如何确认视图被缓存的时间? –

+0

由于这个问题是在CFML松散团队中交叉发布的,我已经在那里回复(我无法复制)。一旦我们找出你的问题,我们可以回来更新答案,因为SO非常适合来回问与答。 –

回答

1

确保您在ColdBox配置中启用了视图缓存。转至/config/ColdBox.cfc文件并添加此项:

coldbox = { 
    // Activate view caching 
    viewCaching = true 
} 

另外,你输错CFC你改变了上述缓存的名字吗?这些更改应该位于/config/CacheBox.cfc文件中,而不是/config/ColdBox.cfc

+0

不,“viewCaching = true”不会改变这一点,不幸的是。我最初配置在'/ config/Cachebox.cfc'中,然后将它移动到'/ config/Coldbox.cfc'中进行测试。该视图总是缓存5分钟。我已经使用该信息更新了我的问题。 –

0

显然,/config/ColdBox.cfc中的reapFrequency也需要设置为一个较小的值,以便让缓存项更早地被移除。

虽然,作为documentation states

在几分钟的延迟产生的缓存收获(不保证)

这不能保证缓存项是在此时间之后真的删除,因此即使当reapFrequency设置为1时,也可能在3分钟后缓存为空。

相关问题