0

我正在尝试缓存存储过程。我下载了 ColdFusion 10,它在 Railo 4 服务器上运行。我在我的 Railo Admin 中设置了数据库连接(默认缓存),根据 Adob​​e 文档,我只需要使用该cachedWithin属性,它就应该被缓存。但是,它没有,我肯定知道这一点,因为我的页面需要超过 10 秒。装载!

我尝试使用cfcache存储过程周围的标签动态缓存它,但这会一直缓存我不想缓存的整个页面。CachePutCacheGet可以工作,但我的代码很复杂,无法有效地适应它们。

超级迷茫。

以下是相关代码:

<cfstoredproc datasource="#XXX#" procedure="XXX" cachedWithin="#CreateTimeSpan(0,3,0,0)#">
                <cfprocparam type="In" value="#IDate#" cfsqltype="CF_SQL_TIMESTAMP">
                <cfprocparam type="In" value="12" cfsqltype="CF_SQL_INTEGER">
                <cfprocparam type="In" value="1" cfsqltype="CF_SQL_BIT">
                <cfprocresult name="DeptQuery">
</cfstoredproc>

更新:事实证明,存储过程并不是花费所有时间的!我终于把它缓存了!但是我对它是如何做到的感到困惑,因为我在多个页面上缓存了相同存储过程的 1000 个变体(每个页面单独有多个存储过程),而我指定的只是一个 cachedWithin 参数。当它将它们拉到视图时,它如何知道哪个过程是哪个过程?

4

1 回答 1

1

您正在传递(看起来像)一个日期/时间。查询缓存基于查询的参数(或更具体地说,将使用的 SQL)。我假设您每次都传递不同的日期/时间值。每个不同的日期/时间值都会有自己的缓存结果,除非您每次都传入相同的日期值?

例如,这些将被视为两个不同的缓存对象:

<cfstoredproc datasource="#XXX#" procedure="XXX" cachedWithin="#CreateTimeSpan(0,3,0,0)#">
     <cfprocparam type="In" value="2013-06-13 09:00:00" cfsqltype="CF_SQL_TIMESTAMP">
</cfstoredproc>

<cfstoredproc datasource="#XXX#" procedure="XXX" cachedWithin="#CreateTimeSpan(0,3,0,0)#">
     <cfprocparam type="In" value="2013-06-13 10:00:00" cfsqltype="CF_SQL_TIMESTAMP">
</cfstoredproc>    

文档中:

要使用缓存数据,当前查询必须使用相同的 SQL 语句、数据源、查询名称、用户名和密码。

于 2013-06-13T14:14:54.607 回答