在ColdFusion中缓存存储过程

时间:2013-06-13 13:34:42

标签: caching coldfusion memcached railo cfcache

我正在尝试缓存存储过程。我已经下载了ColdFusion 10,它在Railo 4服务器上运行。我在我的Railo Admin(默认缓存)中设置了数据库连接,根据Adobe文档,我只需要使用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 param。当它将它们拉到视图时,它如何知道哪个程序?

1 个答案:

答案 0 :(得分:1)

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

e.g。这些将被视为两个不同的缓存对象:

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

来自documentation

  

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