使用 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')
它将为单独的查询保留单独的缓存。
我必须 运行 一项经常性任务,需要检查过去 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')
它将为单独的查询保留单独的缓存。