我在我的mac Sierra机器上使用Rails 4.2.7(PostGres 9.5)。我想使用内存缓存来缓存一些更常见的数据库查询。例如,这是一个带有一些缓存方法的模型......
class DistanceUnit < ActiveRecord::Base
def self.cached_find_by_id(id)
Rails.cache.fetch("#{id}") do
find_by_id(id)
end
end
def self.cached_find_by_abbrev(abbrev)
Rails.cache.fetch("#{abbrev}") do
find_by_abbrev(abbrev)
end
end
end
我在整个应用程序中调用“cached_find_by_id”和“cached_find_by_abbrev”。然后在我的./config/environments/development.rb文件中
config.action_controller.perform_caching = true
...
# Enable the Rails cache
config.cache_store = :memory_store
但是当我在本地运行我的应用程序时,我注意到SQL查询正在运行......
DistanceUnit Load (0.4ms) SELECT "distance_units".* FROM "distance_units" WHERE "distance_units"."id" = $1 LIMIT 1 [["id", 4]]
…
DistanceUnit Load (0.3ms) SELECT "distance_units".* FROM "distance_units" WHERE "distance_units"."id" = $1 LIMIT 1 [["id", 4]]
我还需要做些什么才能让Rails使用我的缓存方法? Rails似乎根本没有使用我的内存缓存。
答案 0 :(得分:0)
您应该在development.rb中启用perform_caching:
config.action_controller.perform_caching = true
完成后。重启你的控制台。触发方法。第一次它将从数据库加载,下次它将从您的内存缓存加载。
此外,我建议您使用Shopify的identify_cache gem。