我有两个模型Employee and Organization
class Employee < ActiveRecord::Base
belongs_to :organization, touch: true
end
class Organization < ActiveRecord::Base
has_many :employees
end
有一个用于搜索员工的表单。
搜索查询基于first_name,last_name和emp_id。
我正在尝试实施低级缓存
在员工控制器中
def list_employees
first_name = params[:employee][:first_name]
last_name = params[:employee][:last_name]
emp_id = params[:employee][:emp_id]
@employees = Employee.all_employees(first_name,last_name,emp_id)
end
在员工模型中
def self.all_employees(first_name,last_name,emp_id)
cache_key = "#{first_name}-#{last_name}-#{emp_id}"
Rails.cache.fetch("#{cache_key}", expires_in: 5.minutes) do
Employee.where("first_name like ? and last_name like ? and emp_id like ?","%#{first_name}%","%#{last_name}%","%#{emp_id}%")
end
end
但每次再次查询时我都看不出任何差异。我可以看到数据 Rails.cache.fetch(&#34; cache_keys&#34;)来自控制台,即使在此查询到员工表。
我第一次查询时需要500毫秒 第二次相同的查询需要490ms(不从缓存服务)
让我知道我做错了什么。
提前致谢
答案 0 :(得分:0)
这是您存储为缓存值的内容:
Employee.where("first_name like ? and last_name like ? and emp_id like ?","%#{first_name}%","%#{last_name}%","%#{emp_id}%")
这不是员工列表,这只是有关如何查找员工的信息。因此,当您稍后从缓存中检索此对象时,您每次都会运行查询,以获取员工。
在缓存时运行查询,方法是将.to_a
附加到该缓存中。这将返回一组员工,这是您要缓存的内容。