2

我正在缓存这样的模型的结果(使用 Memcached):

Rails.cache.fetch('Store.all') { Store.all }

稍后,我想检索 Store.all 的一个子集,例如某个城市的商店。是否有一种简单的方法来查询已经缓存的商店集,或者我是否需要为每个查询再次访问数据库?

谢谢!

4

2 回答 2

2

请记住,数据库已针对匹配任意条件的查询进行了优化,并且缓存存储只是在您拥有已知键的情况下进行快速查找。你应该只对你已经过滤或准备好的东西使用缓存。

假设cities/1/stores城市 1 中的所有商店都有一个缓存键,您可以缓存此集合并稍后再次获取它。

如果您有大量商店,尝试将其缓存Store.all为一个缓存键,然后尝试使用 ruby​​ 过滤给定城市或任何其他标准,这将是一种反优化。您的程序将被迫遍历所有城市,因为数组在city_id. 您最好让数据库使用“where”子句完成这项工作并使用数据库提供的索引功能。

于 2012-07-13T07:37:00.603 回答
0

你可以用红宝石做到这一点。首先,从缓存中获取结果,然后遍历集合以查找给定城市的商店。假设您使用的是 memcached,没有简单的方法可以查询它,因为它是一个简单的键:值存储。

于 2012-05-24T23:54:46.353 回答