代码之家  ›  专栏  ›  技术社区  ›  Trenton Tyler

Rails扫描ActiveRecord的属性更改

  •  0
  • Trenton Tyler  · 技术社区  · 7 年前

    我正在rails应用程序中创建一个配对系统,用户可以在其中发布一段时间的配对。如果发布匹配的时间未被接受,我需要通过将其活动标志设置为false来取消该匹配。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Marcus Ilgner    7 年前

    这里有两个想法可以让你开始。对于所有方法,我建议封装业务逻辑,以便在服务对象中创建新的匹配项,以避免前面提到的模型的混乱。

    • 持久化后,立即使用预定义的TTL将匹配的id存储在Redis中。例如,使用表单中的键 matches:open:1234 . 每当需要打开的匹配项列表时,只需查询下的键即可 matches:open:*

    • 在创建匹配项时,还要将一个作业(通过ActiveJob或更具体的框架,如Sidekiq)排队,以检索记录并检查记录是否已被接受。您可以使用以下方法对此进行优化 where(id: match_id, accepted_at: nil).first 如果 nil

    至于定期查询周期性作业中所有挂起的匹配项,这使得针对行级锁的竞争条件的保护更加困难,而且更难扩展,因此我个人建议不要这样做。