【问题标题】:Use memcache to store results from MySQL and perform later queries over them使用 memcache 存储来自 MySQL 的结果并在以后对它们执行查询
【发布时间】:2016-01-31 04:28:48
【问题描述】:

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

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

然后:

@posts.where(some_query)

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

我会很感激任何提示。

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-06-22
      • 1970-01-01
      • 1970-01-01
      • 2018-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-21
      相关资源
      最近更新 更多