【发布时间】:2014-06-19 18:54:11
【问题描述】:
我正在尝试缓存我通过 SQL 查询获取的大量数据(100 000),但缓存不起作用(写入缓存大约需要 30 秒,读取它需要相同的时间)我做错了什么?我的配置变量已经设置为 true
query = "SELECT inscriptions.`id`, banners.`id`, banners.`name`, inscriptions.`registered_at`,
inscriptions.`synched_at`, inscriptions.`state`
FROM inscriptions
JOIN firm_offices
ON inscriptions.`firm_office_1_id` = firm_offices.`id`
JOIN firms
ON firm_offices.`firm_id` = firms.`id`
JOIN banners
ON firms.`banner_id` = banners.`id`
GROUP BY inscriptions.`id`"
result = ActiveRecord::Base.connection.execute(query)
Rails.cache.fetch 'huge-array' do
data = []
result.each do |r|
data.push({ :id => r[0],
:banner_id => r[1],
:banner_name => r[2],
:registered_at => r[3],
:synched_at => r[4],
:state => r[5]})
end
data
end
@data = Rails.cache.read("huge-array")
【问题讨论】:
-
看来,由于您的查询周围没有条件,因此每次运行此函数时它都会运行。如果是这种情况,您就否定了缓存的用处。您是否尝试过为查询执行设置条件?
-
你使用的是什么缓存存储?
-
@zoum26,你打算如何处理这些数据?似乎问题不在于查询或缓存本身,而在于实例化该大小的数组。您可能希望将数据分成几个可缓存的块(通过执行不同的 SQL 查询或将
data拆分为一组,例如 10,000 个),但最好的方法取决于您的目标。跨度>
标签: ruby-on-rails ruby caching activesupport