rails每个app页面上多个表的记录数

时间:2014-09-07 17:07:42

标签: ruby-on-rails caching count

我试图为导航栏上的每个链接添加计数。导航栏上的每个链接都会转到不同的模型。

每次访问者导航到另一个页面时,我都希望避免查询和计算多个模型的记录。

如何缓存此信息? counter_cache似乎只适用于协会。这些是独立的模型,无需关联。

1 个答案:

答案 0 :(得分:1)

你可以使用简单的Model.count,它执行MySQL计数查询,这不应该花费太多。

然后是活动记录缓存,它将查询结果缓存为查询字符串作为缓存键,任何后续请求都会到达缓存,甚至不会再次执行查询,它将直接返回从查询缓存中,所以我认为它根本不会很昂贵。

修改

关于.size,它是enumerable的方法,就像数组一样,使用它需要获取结果集来计算它的大小,结果集是你不需要的额外数据,你只是对计数感兴趣,所以你应该告诉数据库获取计数,因此Model.count,这是我已有的应用程序的一个例子:

User.count
(0.2ms)  SELECT COUNT(*) FROM `users`

User.all.size
User Load (71.4ms)  SELECT `users`.* FROM `users`

请注意查询中的差异,以及响应时间的差异,第一个非常快,因为它已经被缓存了。

关于索引,在mysql(我认为任何尊重的数据库)中,任何主键都应该是唯一的和索引的,因为这是记录的主要标识符,你不需要在迁移中指定它,rails创建了通过它自动增加唯一主键,它是默认的,它甚至不会出现在迁移文件中,以禁用创建主键,您需要添加一个很少需要的额外选项id: false。 / p>