我有一个用户配置文件页面,其中有一个侧栏的用户统计像不像堆栈溢出配置文件页面(例如,总访问量,徽章的数量)。
问题是,目前我正在访问数据库,并计算每个请求的统计数据。我可以实现片段缓存来减少这一点,但是有没有更好的方法来处理这种事情呢?
将汇总的汇总数据存储在数据库中似乎会导致问题(即不一致)。
发布于 2011-09-11 05:24:02
您可以使用以下命令将此信息存储在数据库中,而不是重新计算它:
计数器缓存
例如,如果测量徽章的数量,您可以在User中创建一个名为badges_count的数据库字段,然后在徽章模型中创建belongs_to :user, :counter_cache => true。现在,每当徽章的数量发生变化时,您都可以访问计数,而无需在@user.badges_count上进行任何新的计算。
一个基本的实现:http://asciicasts.com/episodes/23-counter-cache-column
自定义回调
假设您有一个字段,它测量比简单计数更复杂的行为。在这种情况下,只需使用before_save、after_save、before_create等实现回调,每当某个操作发生时都会更新字段。
对不一致的担忧
只有在错误的情况下,才会在数据库中存储数据是不一致的。任何统计信息都可以通过有限数量的路径进行更新,您应该确保在更新所使用的任何字段时覆盖所有路径。Rails用counter_caching为你做了这件事,如果你使用自定义回调或者你有一些不寻常的情况,你必须自己去做。
发布于 2011-09-11 06:12:22
你可以使用一个隐藏的div,就像这个问题(Caching data by using hidden divs)。根据您希望缓存多少数据,这可能是一个很好的解决方案。
https://stackoverflow.com/questions/7374722
复制相似问题