cma*_*n77 4 memcached caching ruby-on-rails dalli
我试图产生一个片段缓存(使用达利/ Memcached的店),但是关键是被用"#"产生的关键的一部分,所以Rails的似乎并没有被承认,有一个缓存值,并击中数据库.
我在视图中的缓存键如下所示:
cache([@jobs, "index"]) do
控制器具有:
@jobs = @current_tenant.active_jobs
使用这样的实际Active Record查询:
def active_jobs
   self.jobs.where("published = ? and expiration_date >= ?", true, Date.today).order("(featured and created_at > now() - interval '" + self.pinned_time_limit.to_s + " days') desc nulls last, created_at desc")
end
查看rails服务器,我看到缓存读取,但SQL查询仍然运行:
Cache read: views/#<ActiveRecord::Relation:0x007fbabef9cd58>/1-index 
Read fragment views/#<ActiveRecord::Relation:0x007fbabef9cd58>/1-index (1.0ms)
(0.6ms) SELECT COUNT(*) FROM "jobs" WHERE "jobs"."tenant_id" = 1 AND (published = 't' and expiration_date >= '2013-03-03')
  Job Load (1.2ms)  SELECT "jobs".* FROM "jobs" WHERE "jobs"."tenant_id" = 1 AND (published = 't' and expiration_date >= '2013-03-03') ORDER BY (featured and created_at > now() - interval '7 days') desc nulls last, created_at desc
关于我可能做错什么的任何想法?我确定它必须与密钥生成和ActiveRecord :: Relation进行,但我不确定如何.
背景:
问题是每次运行代码时关系的字符串表示形式都不同:
                                 |This changes| 
views/#<ActiveRecord::Relation:0x007fbabef9cd58>/...
因此,每次都会获得不同的缓存密钥.
再说,这是不能够完全摆脱数据库查询.(你自己的答案是最好的答案)
解:
生成有效密钥,而不是此
cache([@jobs, "index"])
做这个:
cache([@jobs.to_a, "index"])
这将查询数据库并构建模型数组,从中cache_key检索数据.
PS:我可以发誓使用以前版本的Rails中的关系......
| 归档时间: | 
 | 
| 查看次数: | 4480 次 | 
| 最近记录: |