Coldfusion 在Application.cfc中存储查询结果的好做法或坏做法

Coldfusion 在Application.cfc中存储查询结果的好做法或坏做法,coldfusion,scope,coldfusion-8,application.cfc,Coldfusion,Scope,Coldfusion 8,Application.cfc,在我的应用程序中,我有一个侧边栏(在每一页上),显示一个小型公司的职位空缺列表。在Application.cfc中运行查询并以某种方式将结果存储在那里是明智的做法,还是有一种更聪明的方法来运行查询并将结果存储在不同范围的其他地方 服务器资源的最佳利用是什么 提前谢谢 编辑:我正在使用CF8。更新可能每月进行一次。如果结果取决于用户会话,则会想到会话范围。应用程序范围仅在服务器(重新)启动时才会刷新,对吗? 就资源而言,服务器在第一次请求结果时(应用程序范围)只加载一次结果显然更好。但很明显,这些

在我的应用程序中,我有一个侧边栏(在每一页上),显示一个小型公司的职位空缺列表。在Application.cfc中运行查询并以某种方式将结果存储在那里是明智的做法,还是有一种更聪明的方法来运行查询并将结果存储在不同范围的其他地方

服务器资源的最佳利用是什么

提前谢谢


编辑:我正在使用CF8。更新可能每月进行一次。

如果结果取决于用户会话,则会想到会话范围。应用程序范围仅在服务器(重新)启动时才会刷新,对吗? 就资源而言,服务器在第一次请求结果时(应用程序范围)只加载一次结果显然更好。但很明显,这些结果很快(或很快)就会过时

如果您担心发送到数据库的查询太多,可以研究缓存结果


既然你说的是一家小公司,也许你应该从每次会话重新加载内容开始,看看数据库服务器上的负载是否失控。

你有CF9吗?我将使用应用程序作用域,使用cachePut()在缓存对象中缓存查询或生成的HTML,并在需要时使用cacheGet()调用缓存对象。然后,无论您在哪里管理该信息的更新(手动CRUD或使用该信息的web服务等),只要确保在感觉到更改时刷新该缓存对象即可。最初在onApplicationStart()中填充缓存对象,您就可以开始了。

职位空缺多久更改一次?您可以将它们存储在应用程序中,并安排一个定期重新运行查询的计划任务。

在侧栏调用的cfquery上使用cachedwithin。

这是迄今为止最直接的方法。这个问题并没有给人留下更复杂的印象。因此,如果我的CFC中有
SELECT*FROM jobs
,它将缓存timespan的查询结果,并且在timespan结束之前不调用DB?作为记录,我总是在查询中使用
标记。我想我会在通过时取消它…这取决于CFC是否持久以及查询的名称是否持久。如果将对象存储在应用程序作用域中,并且qJobs没有本地作用域,那么是的,在时间跨度结束之前它不会调用DB。谢谢,这看起来是我的应用程序的一个优雅解决方案。谢谢你的帮助,我用的是CF8。尽管如此,我们正在考虑很快切换到CF9。我同意一旦升级,这种方法将是最好的。通常,您应该尽可能靠近输出进行缓存,这意味着要缓存作业列表的HTML。查询将只运行一次,CF将只生成HTML一次-此后,您只需从缓存中返回HTML片段,直到下一次更新。您可以保存DB调用和CF处理,而不必担心查询是否缓存。日志每月(大致)都会更改,因此这不是一个真正常见的情况。我最初考虑了会话范围,但不确定它是否是存储数据的最优雅方式。