开发者

With RoR, what's the best place/layer to put your memcache login in?

开发者 https://www.devze.com 2023-01-21 03:47 出处:网络
With RoR, you have your model, controller and view. The model has both class properties etc., and db access code mingled in.

With RoR, you have your model, controller and view.

The model has both class properties etc., and db access code mingled in.

In your controllers, you use your models to fetch certain data to push to your views.

In the Java world, you would have a DAO per entity, and then a 'Service' layer where you could decide to pull the object from cache or fetch from your DA开发者_JS百科O.

What do Rails people do?


Assuming your want to use Memcached as caching layer, you might probably be happy to know that the Rails caching architecture already supports Memcached storage. Just configure it in your application.rb file (assuming you are using Rails 3):

module MyApp
  class Application < Rails::Application

    config.cache_store = :dalli_store

  end
end

Here I'm using the :dalli_store which is provided by the Dalli gem, an high performance Memcached client. Rails ships with a standard :memcached store, so you can use it if you want.

Then, once configured, you can access your cache layer using Rails.cache.

  • Rails.cache.write
  • Rails.cache.read
  • Rails.cache.fetch
  • Rails.cache.delete

For instance, let's say you want to cache an expensive ActiveRecord query.

class Post < ActiveRecord::Base
  def expensive_query
    Rails.cache.fetch("posts/expensive_query") do
      where("1 = 1").all
    end
  end
end

The first time, when the cache is not available, #fetch will execute the content of the block and cache it. Later, the cache will simply be returned.

0

精彩评论

暂无评论...
验证码 换一张
取 消