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

Use memcache to store results from MySQL and perform later queries over them

我必须 运行 一项经常性任务,需要检查过去 3 个月的帖子并使用 activerecord 进行一些 sql 检查。我的表现一塌糊涂,因为我需要每分钟执行一次此任务,而且我的一些 sqls 查询很慢。 我一直在使用并行、分布式和高级 sql 缓存进行一些测试,但与此同时,我想知道是否可以将查询结果缓存到 memcached 中,然后针对该键执行所有后续查询。

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

然后:

@posts.where(some_query)

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

如有任何提示,我将不胜感激。

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

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')

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