【问题标题】:Does counterCache suffer from race conditions?counterCache 是否受到竞争条件的影响?
【发布时间】:2013-08-03 02:47:00
【问题描述】:

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

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

【问题讨论】:

    标签: php cakephp race-condition counter-cache


    【解决方案1】:

    先完成的操作将是结果。操作在同时时间发生的可能性很小,而且在技术上也可能是不可能的。所以两者中的一个是第一位的。然后还有服务器和浏览器接收请求所需的时间。因此,每当下一个视图请求到来时,您都会在数据库中获得此​​时已更新的任何内容。

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

    最后我真的不会担心计数是否会暂时减少 +/- 1,特别是在论坛中。

    【讨论】:

      【解决方案2】:

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

      我对 SQL 事务不是很精通,但我很确定某种事务配置会阻止这种形式的发生。

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

      【讨论】:

        猜你喜欢
        • 2022-01-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-14
        相关资源
        最近更新 更多