我正在缓存这样的模型的结果(使用 Memcached):
Rails.cache.fetch('Store.all') { Store.all }
稍后,我想检索 Store.all 的一个子集,例如某个城市的商店。是否有一种简单的方法来查询已经缓存的商店集,或者我是否需要为每个查询再次访问数据库?
谢谢!
我正在缓存这样的模型的结果(使用 Memcached):
Rails.cache.fetch('Store.all') { Store.all }
稍后,我想检索 Store.all 的一个子集,例如某个城市的商店。是否有一种简单的方法来查询已经缓存的商店集,或者我是否需要为每个查询再次访问数据库?
谢谢!
请记住,数据库已针对匹配任意条件的查询进行了优化,并且缓存存储只是在您拥有已知键的情况下进行快速查找。你应该只对你已经过滤或准备好的东西使用缓存。
假设cities/1/stores
城市 1 中的所有商店都有一个缓存键,您可以缓存此集合并稍后再次获取它。
如果您有大量商店,尝试将其缓存Store.all
为一个缓存键,然后尝试使用 ruby 过滤给定城市或任何其他标准,这将是一种反优化。您的程序将被迫遍历所有城市,因为数组在city_id
. 您最好让数据库使用“where”子句完成这项工作并使用数据库提供的索引功能。
你可以用红宝石做到这一点。首先,从缓存中获取结果,然后遍历集合以查找给定城市的商店。假设您使用的是 memcached,没有简单的方法可以查询它,因为它是一个简单的键:值存储。