使用memcache存储MySQL的结果并对它们执行以后的查询

时间:2015-10-30 17:01:14

标签: mysql ruby-on-rails ruby caching memcached

我必须运行一个周期性任务,需要检查过去3个月的帖子,并使用activerecord进行一些SQL检查。我的表现很糟糕,因为我需要每分钟执行一次此任务,并且我的一些mysql查询速度很慢。 我一直在做并行,分布式和高级sql缓存的一些测试,但与此同时我想知道我是否可以将查询结果缓存到memcached中并对该密钥执行所有后续查询。

@posts = Rails.cache.fetch('posts') { Post.where(updated_at: 3.months.ago..Time.now) }

然后:

@posts.where(some_query)

但是最后一条指令总是进入数据库而不是使用memcached。

我将不胜感激。

1 个答案:

答案 0 :(得分:0)

为什么不将查询放入带有缓存块的静态方法中,如下所示:

def self.recent(query = nil)
  Rails.cache.fetch("post/#{ query || 'all' }") do 
   @posts = Post.where(updated_at: 3.months.ago..Time.now)
   @posts.where(query) if query.present?
 end 
end

现在在其他地方使用它:

@posts = Post.recent('your query will go here')

它将为单独的查询保留单独的缓存。