【发布时间】:2025-12-23 18:25:11
【问题描述】:
我正在开发一个 Ruby on Rails 网站。
为了提高性能,我想建立一些各种统计数据的缓存,以便将来显示它们时,我只需要显示缓存而不是拉所有数据库记录来计算这些统计数据。
例子:
一个模型用户有_many 评论。我想将他们有多少 cmets 存储到用户缓存模型中。这样,当我需要显示用户创建的 cmets 数量时,它只是对 stats 模型的简单查询。每次创建或销毁新评论时,它只会增加或减少计数器。
如何在网站上线时构建这些统计信息?我担心的是,在我请求数据库计算用户拥有的评论数量之后,但在它能够执行命令将其保存到统计信息之前,该用户可能会潜入并在某处添加另一条评论。这将增加计数器,但随后立即被另一个线程覆盖,导致保存不正确的统计信息。
我对 ActiveRecord 事务块很熟悉,但据我了解,它们是为了保证所有或没有一个整体成功,而不是充当数据库上数据的互斥保护。
是否有必要关闭网站以进行此类更改?
【问题讨论】:
标签: ruby-on-rails database caching