Tag: 缓存

为memcached和Rails组合片段和对象缓存的最佳方法

假设您有一个显示最新post的页面片段,您将在30分钟后过期。 我在这里使用Rails。 30.minutes) do %> … 显然,如果片段存在,您不需要进行数据库查找以获取最新的post,因此您也应该能够避免这种开销。 我现在正在做的是在控制器中这样的东西似乎工作: unless Rails.cache.exist? “views/recent_posts” @posts = Post.find(:all, :limit=>20, :order=>”updated_at DESC”) end 这是最好的方法吗? 安全吗? 我不明白的一件事是,为什么密钥是片段的“ recent_posts ”和稍后检查的“ views/recent_posts ”,但是在看了memcached -vv以查看它的views/recent_posts之后我想出了这个。 另外,我不喜欢手动输入“ recent_posts ”的重复,最好将它保存在一个地方。 想法?

条件页面缓存

假设我有控制器home_controller.rb和动作index 。 我想缓存索引页面,所以我正在做: caches_page :index 但是希望它只为未登录的用户缓存。如果我将条件化为: caches_page :index, :if => :user_not_signed_in? 页面将在首次未登录用户时缓存。 现在,每个登录用户也会看到未登录的内容。 有没有办法在不更改url的情况下分离此操作?

rails 3缓存:命名路由的到期操作

我的控制器有这个: caches_action :render_ticker_for_channel, :expires_in => 30.seconds 在我的路线文件中,我有这个: match ‘/render_c_t/:channel_id’ => ‘render#render_ticker_for_channel’, :as => :render_channel_ticker 在日志文件中我看到: Write fragment views/mcr3.dev/render_c_t/63 (11.6ms) 我如何手动过期? 我需要从与渲染控制器不同的控制器使其到期,但即使在渲染控制器中,我也无法让它过期正确的事情。 如果我做: expire_action(:controller => ‘render’, :action => ‘render_ticker_for_channel’, :id => c.id) 我知道了: Expire fragment views/mcr3.dev/render/render_ticker_for_channel/63 (3.2ms) 如果我做: expire_action(:controller => ‘render’, :action => ‘render_c_t’, :id => c.id) 我知道了: Expire fragment views/mcr3.dev/render/render_c_t/63 (3.2ms) 这个: expire_action(“render_c_t/#{c.id}”) 生产: Expire […]

如何使控制台中的视图缓存片段到期?

就像是 Rails.cache.delete(‘site_search_form’) 似乎没有用。 这可能吗? 谢谢。

mongoid查询缓存

Rails的ActiveRecord有一个名为Query Caching(ActiveRecord :: QueryCache)的function,可以保存请求生命周期的SQL查询结果。 虽然我不太熟悉实现的内部,但我认为它将查询结果保存在Rack env中,在请求结束时将其丢弃。 遗憾的是,Mongoid目前还没有提供这样的function,而且有些查询是隐式发生的(引用),这更加恶化了。 我正在考虑实现这个function,我很好奇,Mongoid(或者,也许是mongo驱动程序?)的位置和方式应该被挂钩以实现它。

如何在rails中缓存计算列?

我有一个活动记录对象树,如: class Part “Part” def complicated_calculation if sub_parts.size > 0 return self.sub_parts.inject(0){ |sum, current| sum + current.complicated_calculation } else sleep(1) return rand(10000) end end end 每次重新计算复杂计算成本太高。 所以,我需要一种缓存值的方法。 但是,如果更改了任何部分,则需要使其缓存及其父级和祖父级等的缓存无效。 作为草稿,我创建了一个列来保存“部分”表中的缓存计算,但这有点臭。 看起来应该有一种更简洁的方法来缓存计算值,而不会将它们放在“真实”列旁边。

部署时“预热缓存”

我想知道是否有人有任何插件或capistrano配方,通过在部署时构建所有页面缓存的html或在部署发生之前本地“预热”rails应用程序的页面缓存。 我有一些大多数静态网站没有太大变化,如果已经编写了html,它会运行得更快,而不是要求一个访问者访问该网站。 而不是自己创建(似乎很容易,但它优先级低)它是否已经存在?

在初始化程序中设置cache_store

我正在尝试使用redis-store作为我的Rails 3 cache_store。 我还有一个初始化器/ app_config.rb,它为配置设置加载一个yaml文件。 在我的初始化程序/ redis.rb中,我有: MyApp::Application.config.cache_store = :redis_store, APP_CONFIG[‘redis’] 但是,这似乎不起作用。 如果我做: Rails.cache 在我的rails控制台中,我可以清楚地看到它正在使用 ActiveSupport.Cache.FileStore 作为缓存存储而不是redis-store。 但是,如果我在application.rb文件中添加配置,如下所示: config.cache_store = :redis_store 它运行得很好,除了在app.rb之后加载app config初始化程序,所以我没有访问APP_CONFIG。 有没有人经历过这个? 我似乎无法在初始化程序中设置缓存存储。

为什么需要在Rails 3中重新加载代码?

我是一名前PHP开发人员,学习Rails和Sinatra。 在PHP中,每个页面请求都加载了所有必需的文件。 如果我更改了一些代码并刷新了页面,我可以确定代码是新鲜的。 在Rails 3中,Controller代码在每个请求中都是新鲜的。 但是,如果我修改/ lib文件夹中的任何代码,我需要重新启动服务器以使更改生效。 为什么会这样? 这与Ruby的设计方式有关吗? Rails是否进行了一些优化以避免在每个请求上重新加载代码? 谢谢! 编辑:我最感兴趣的是幕后发生的事情。 像Rails和Sinatra这样的框架是否为类做了一些特殊的缓存? 如果是这样,他们做了什么? Ruby中的默认行为是每次请求都重新加载所有代码吗? 为什么我们需要Shotgun for Sinatra等工具( http://sinatra-book.gittr.com/#automatic_code_reloading )?