为什么ColdBox应用程序中的renderView()的cacheTimeout设置无效?

时间:2017-02-16 10:33:21

标签: cfml lucee coldbox cachebox

我正在使用模块开发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。

即使我通过coldbox create app MyApp通过CommandBox创建一个全新的测试应用程序,只需将Cachebox.cfc中的缓存设置为一分钟,在Coldbox.cfc中设置viewCaching = true,然后设置{{在Main.cfc中,它没有按预期工作。

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

我有什么遗失的吗?

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

显然,reapFrequency中的/config/ColdBox.cfc也需要设置为较小的值,以便先删除缓存条目。

尽管如此documentation states

  

产生缓存的延迟(以分钟为单位)(不保证)

无法保证在此之后它真正删除的缓存项目,因此即使reapFrequency设置为1,也可能在3分钟后缓存为空。