counterCache是​​否会受到竞争条件的影响?

时间:2013-07-23 02:35:24

标签: php cakephp race-condition counter-cache

我有一个关于counterCache的问题,文档根本没有说明。 counterCache是​​否在更新字段值时检查竞争条件?

例如,假设我们有一个论坛实现,并且对于每个论坛,我们通过counterCache存储了一些 n 主题。然后,如果两个用户几乎同时使用该模型(足以重叠他们的操作,意味着当一个人结束它时,另一个仍然将使用它),一个创建一个新主题而另一个(假设它可以)删除另一个主题,然后它会显示 n 主题,而不是 n + 1 n-1

2 个答案:

答案 0 :(得分:0)

无论什么操作首先完成都将是结果。操作在相同的时间发生的可能性很小,而且可能在技术上是不可能的。所以两者中的一个首先出现。然后还有服务器和浏览器接收请求所花费的时间。因此,每当下一个查看请求到来时,您将获得此时在数据库中更新的任何内容。

通过检查代码,您还可以看到代码正在执行查找('count')而不是inc /减少+/- 1。 http://api.cakephp.org/2.3/source-class-Model.html#1913-1981因此,在上一个操作完成后,将写入缓存。

最后我真的不担心,如果计数暂时减少+/-一次,特别是在论坛中。

答案 1 :(得分:0)

我相信它可以,但不是因为Cake,而是因为非事务行为中的多个SQL操作,以及同时来自多个客户端(用户)。任何有或没有框架的Web应用程序都会遇到这种情况。

我对SQL事务并不十分熟悉,但我非常确定某种事务配置可以防止这种情况发生。

正如burzum所说,论坛的例子绝对不值得担心。