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

标签 ruby-on-rails activerecord arel

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

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

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

谢谢!

最佳答案

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

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

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

关于ruby-on-rails - 可以查询 Rails 中缓存的条目集合吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10746811/

相关文章:

ruby-on-rails - 我如何在具有事件记录的 Rails 中使用两个不同的数据库?

mysql - Yii2-如何为同一用户更新多条记录

sql - 如何将 "DISTINCT ON"与Arel/ActiveRecord结合使用?

ruby-on-rails - 使用 Devise 进行 Action 电缆测试

ruby-on-rails - 将两个实例变量传递给 js.erb 文件?

ruby-on-rails - 在 ruby​​ 中测试 mixin

mysql - 使用 codeigniter 的事件记录模式的 UNION 查询

mysql - 如何在 AREL 查询中使用别名引用子查询?

mysql - 在 ActiveRecord 中使用 SQL 函数进行插入/更新

ruby-on-rails - 从 NativeScript 上传到 Rails Shrine