我必须运行一个周期性任务,需要检查过去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。
我将不胜感激。
答案 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')
它将为单独的查询保留单独的缓存。