Coldfusion cflock很少更改的应用程序变量

Coldfusion cflock很少更改的应用程序变量,coldfusion,cfml,Coldfusion,Cfml,我们目前有一系列加载到应用程序范围中的变量,这些变量很少发生变化 很少改变,我的意思是,它们是像电话号码一样的字符串,或出现在网站上的简单文本值,可能每周或每月改变一次 因为我们正在读取这些变量,而且它们很少发生变化,所以是否需要将它们封装在cflock中 我认为将这些变量包装在一个cflock中会有很大的编码开销,因为模板可能包含这些静态变量的20多个实例 任何关于这方面的建议都非常感谢我个人认为你不需要这样做。这些变量本质上是常量 但是,您需要自己评估这一点。您需要回答这样一个问题:“使用陈

我们目前有一系列加载到应用程序范围中的变量,这些变量很少发生变化

很少改变,我的意思是,它们是像电话号码一样的字符串,或出现在网站上的简单文本值,可能每周或每月改变一次

因为我们正在读取这些变量,而且它们很少发生变化,所以是否需要将它们封装在cflock中

我认为将这些变量包装在一个cflock中会有很大的编码开销,因为模板可能包含这些静态变量的20多个实例


任何关于这方面的建议都非常感谢

我个人认为你不需要这样做。这些变量本质上是常量

但是,您需要自己评估这一点。您需要回答这样一个问题:“使用陈旧数据读取这些变量会产生什么后果?”

这意味着,如果在您的示例中,请求中使用了错误的电话号码,这是一场灾难吗?如果这是一个你可以忍受的问题,那么你不能做出任何改变。但是,如果在计算中使用了变量,或者如果这些变量过时将导致不可接受的问题,那么您需要锁定对这些变量的访问。通过这种方式,您可以将精力集中在需要的地方,并将额外的工作最小化


另外,如果您确实需要锁定任何变量,那么使用的一个好模式是将它们存储在应用程序范围中存储的CFC实例中。通过这种方式,您可以处理CFC中的所有锁定,并且您的调用代码保持简单

取决于ACF、Railo等的版本。。。如果您正在使用,我建议将此类数据更好地存储在缓存中,而不是存储在应用程序范围中。通过重启等,缓存可以有更多的持久性。。。这也是一种更有效的方式

看一下cacheput、cacheget、cachedelete等。。。文档中的函数。我相信这是CF9和Railo3.2中添加的功能

再进一步,您可以简单地将使用它们的整个输出缓存X次,这样每次加载该部分时,它只需从缓存中加载一个东西,而不是您提到的20次左右


如果要将它们存储在应用程序范围中,那么实际上只需要在更新它们的代码部分使用cflock,并在应用程序级别将其锁定。这样,任何想要读取它们的东西都必须等待它完成更新,然后才能读取它们,因为更新线程将锁定应用程序范围

你到底是如何改变它们的?