2

我正在开发一个带有模块的 ColdBox 应用程序,并希望使用它的缓存功能来缓存视图一段时间。

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 中。

即使我通过 CommandBox via 创建了一个全新的测试应用程序coldbox create app MyApp,然后仅将 Cachebox.cfc 中的缓存设置为一分钟,viewCaching = true在 Coldbox.cfc 中设置并在 Main.cfc 中设置event.setView( view="main/index", cache=true ),它也无法按预期工作。

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

有什么我想念的吗?

4

2 回答 2

1

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

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

另外,您是否输入了为上述缓存更改的 CFC 的名称?这些更改应该在/config/CacheBox.cfc文件中,而不是在/config/ColdBox.cfc.

于 2017-02-16T12:28:55.877 回答
0

显然,还需要将reapFrequency中的/config/ColdBox.cfc设置为较小的值,以便让缓存条目更早地被删除。

虽然,正如文档所述

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

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

于 2017-02-20T10:58:19.400 回答