ruby-on-rails – Memcached总是错过(rails)
发布时间:2020-12-17 03:09:35 所属栏目:百科 来源:网络整理
导读:嗨Stackoverflowers,我在这个问题上花了太多时间来保持理智,所以是时候寻求帮助了… 我有一个使用此方法的类: def telecom_info Rails.cache.fetch("telecom_info_for_#{ref_num}",:expires_in= 3.hours) do info = Hash.new(0) Telecom::SERVICES.each do
嗨Stackoverflowers,我在这个问题上花了太多时间来保持理智,所以是时候寻求帮助了…
我有一个使用此方法的类: def telecom_info Rails.cache.fetch("telecom_info_for_#{ref_num}",:expires_in=> 3.hours) do info = Hash.new(0) Telecom::SERVICES.each do |source| results = TelecomUsage.find(:all,:joins=>[:telecom_invoice=>{ :person=> :org_person}],:conditions=>"dotted_ids like '%#{ref_num}%' and telecom_usages.ruby_type = '#{source}'",:select=>"avg(charge) #{source.upcase}_AVG_CHARGE,max(charge) #{source.upcase}_MAX_CHARGE,min(charge) #{source.upcase}_MIN_CHARGE,sum(charge) #{source.upcase}_CHARGE,avg(volume) #{source.upcase}_AVG_VOLUME,max(volume) #{source.upcase}_MAX_VOLUME,min(volume) #{source.upcase}_MIN_VOLUME,sum(volume) #{source.upcase}_VOLUME ") results = results.first ['charge','volume'].each do |source_type| info["#{source}_#{source_type}".to_sym] = results.send("#{source}_#{source_type}".downcase).to_i info["#{source}_min_#{source_type}".to_sym] = results.send("#{source}_min_#{source_type}".downcase).to_i info["#{source}_max_#{source_type}".to_sym] = results.send("#{source}_max_#{source_type}".downcase).to_i info["#{source}_avg_#{source_type}".to_sym] = results.send("#{source}_avg_#{source_type}".downcase).to_i end end return info end end 正如您所看到的,这是一个昂贵的调用,每个请求都会调用ALOT,因此我想缓存它.问题是memcached似乎不起作用,在日志文件中,我得到: 缓存读取:telecom_info_for_60000000 缓存未命中:telecom_info_for_60000000({}) 奇怪的是,我知道memcached正在工作,因为它确实缓存了我在另一个模型中的其他一些函数的结果. 有什么建议?我在REE 1.8.7上运行Rails 2.3.5 解决方法
用信息替换退货信息.
Rails.cache.fetch("telecom_info_for_#{ref_num}",:expires_in=> 3.hours) do # ... info end return关键字总是从当前方法返回,这意味着信息永远不会返回到您对Rails.cache.fetch的调用,也不会执行该方法的其余部分.当最后一个语句只是info时,这是将给予Rails.cache.fetch的值,并且您将允许该方法通过将此值存储在缓存中来完成其任务. 比较以下内容: def my_method 1.upto(3) do |i| # Calling return immediately causes Ruby to exit the current method. return i end end my_method #=> 1 根据经验:除非你真的想退出当前块并从当前方法返回,否则总是省略return. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |