Ruby on rails 可以在Rails中查询缓存的条目集合吗?

Ruby on rails 可以在Rails中查询缓存的条目集合吗?,ruby-on-rails,activerecord,arel,Ruby On Rails,Activerecord,Arel,我正在缓存这样一个模型的结果(使用Memcached): 稍后,我想检索Store.all的子集,例如某个城市的商店。有没有一种简单的方法可以查询已经缓存的存储集,或者每次查询都需要再次访问数据库 谢谢 你可以用ruby来做。首先,从缓存中获取结果,然后遍历集合以查找给定城市中的商店。假设您使用的是memcached,则没有简单的查询方法,因为它是一个简单的键:值存储。请记住,数据库针对匹配任意条件的查询进行了优化,如果您有一个已知的键,则缓存存储只是一个快速查找。您应该仅对已筛选或准备的内容使

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

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


谢谢

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

请记住,数据库针对匹配任意条件的查询进行了优化,如果您有一个已知的键,则缓存存储只是一个快速查找。您应该仅对已筛选或准备的内容使用缓存

假设city 1中的所有商店都有一个像
cities/1/stores
这样的缓存键,您可以缓存此集合,稍后再获取它

如果你有大量的商店,那么尝试将
Store.all
缓存为一个缓存键,然后根据给定的城市或任何其他条件尝试使用ruby对其进行过滤,这将是一种反优化。由于数组在
city\u id
上没有索引,您的程序将被迫遍历所有城市。最好让数据库使用“where”子句来完成这项工作,并使用数据库提供的索引功能

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