我在尝试缓存一个存储过程。我已经下载了ColdFusion 10,并且它正在一个Railo 4服务器上运行。我在Railo (默认缓存)中设置了数据库连接,根据Adobe,我只需要使用cachedWithin属性,它应该被缓存。然而,它不是,我知道这一点是肯定的,因为我的网页需要超过10秒。装货!
我尝试使用存储过程周围的cfcache标记动态地缓存它,但是这使我不想缓存的整个页面保持高速缓存。CachePut和CacheGet也可以工作,但是我的代码很复杂,可以有效地适应它们。
超级迷茫。
以下是相关代码:
<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 s相同存储过程的变体(每个页面都有多个存储过程),而我所指定的只是一个cachedWithin param。当它把它们拉到视图上时,它怎么知道哪个程序是哪一个程序?
发布于 2013-06-13 14:14:54
你正在传递日期/时间(看上去像什么)。查询缓存基于查询的参数(更具体地说,是将使用的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语句、数据源、查询名、用户名和密码。
https://stackoverflow.com/questions/17088441
复制相似问题