hdknr’s posterous

 
Filed under

memcached

 

cooldaemonの備忘録

蛇足

Web サービス開発の現場で、Kai を使うべき箇所に Memcached が選択されていたり、RabbitMQ を使うべき箇所に MySQL をベースとしたアレコレが選択されている現状があるのではないかと妄想*4しています。

例えば、似たような機能を提供する Kai と Memcached ですが、それぞれの利点から得意とする領域が異なるので、適材適所で使い分けできると良いだろうと考えています。

ただ、Kai や RabbitMQ を現場で運用するには、Erlang VM の理解が必要であるため、コードリーディング記事だけでは足りないのだろうなぁと認識しています。

Filed under  //   erlang   Kai   memcached   rabbitmq  

Comments [0]

ruby:MemCache

hdknr@debsq:~/tmp/cached_mem$ more config/environment.rb

memcache_options = {
:c_threshold => 10_000,
:compression => false,
:debug => false,
:namespace => 'vis_mod',
:readonly => false,
:urlencode => false
}
CACHE = MemCache.new memcache_options
CACHE.servers = 'localhost:11211'

hdknr@debsq:~/tmp/cached_mem$ ruby script/console
Loading development environment (Rails 2.3.4)
@@@ config/environtment.rb
>> sql ="SELECT * FROM `categories` WHERE (`categories`.`id` = 1)"
=> "SELECT * FROM `categories` WHERE (`categories`.`id` = 1)"
>> d = Digest::MD5.hexdigest(sql)
=> "1b837a35dbfd6bf42f95e110df28c9e5"
>> Category.find_by_sql(sql)
=> [#]
>> CACHE.set(d,Category.find_by_sql(sql))
=> "STORED\r\n"
>> CACHE.get(d)
=> [#]

memcachedログ。

32: Client using the ascii protocol
>32 STORED
>32 sending key vis_mod:1b837a35dbfd6bf42f95e110df28c9e5C 0 247
Category:@attributes_cache{
>32 END

Filed under  //   MemCache   memcached   rails   ruby  

Comments [0]

cached_client: libmemcache-cleint-ruby1.8 で少し進んだ。が、バージョンエラー。

http://hdknr.posterous.com/rails-memcacheutil に関して。

visite:/home/www/visite# aptitude install libmemcache-client-ruby1.8
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています              
状態情報を読み取っています... 完了
拡張状態情報を読み込んでいます    
パッケージの状態を初期化しています... 完了
タスクの記述を読み込んでいます... 完了      
以下の新規パッケージがインストールされます:
  libmemcache-client-ruby1.8
更新: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。
9,258B のアーカイブを取得する必要があります。展開後に 73.7kB のディスク領域が新たに消費されます。
拡張状態情報を書き込んでいます... 完了
取得:1 http://ftp.jp.debian.org squeeze/main libmemcache-client-ruby1.8 1.5.0-2 [9,258B]
9,258B を 0s 秒でダウンロードしました (38.3kB/s)
未選択パッケージ libmemcache-client-ruby1.8 を選択しています。
(データベースを読み込んでいます ... 現在 43179 個のファイルとディレクトリがインストールされています。)
(.../libmemcache-client-ruby1.8_1.5.0-2_all.deb から) libmemcache-client-ruby1.8 を展開しています...
libmemcache-client-ruby1.8 (1.5.0-2) を設定しています ...
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています              
状態情報を読み取っています... 完了
拡張状態情報を読み込んでいます    
パッケージの状態を初期化しています... 完了
拡張状態情報を書き込んでいます... 完了      
タスクの記述を読み込んでいます... 完了 

visite:/home/www/visite# dpkg -L  libmemcache-client-ruby1.8
/.
/usr
/usr/share
/usr/share/doc
/usr/share/doc/libmemcache-client-ruby1.8
/usr/share/doc/libmemcache-client-ruby1.8/copyright
/usr/share/doc/libmemcache-client-ruby1.8/changelog.Debian.gz
/usr/lib
/usr/lib/ruby
/usr/lib/ruby/1.8
/usr/lib/ruby/1.8/memcache.rb
/usr/lib/ruby/1.8/memcache_util.rb

visite:/home/www/visite# ruby script/server
./script/../config/boot.rb:26:Warning: Gem::SourceIndex#search support for String patterns is deprecated, use #find_name
=> Booting Mongrel (use 'script/server webrick' to force WEBrick)
=> Rails application starting on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
** Starting Mongrel listening at 0.0.0.0:3000
** Starting Rails with development environment...
Exiting
/var/lib/gems/1.8/gems/cached_model-1.3.1/lib/cached_model.rb:77: 1.10.0 is not a class/module (TypeError)
     from /usr/lib/ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require'
     from /usr/lib/ruby/1.8/rubygems/custom_require.rb:36:in `require'
     from /var/lib/gems/1.8/gems/activesupport-1.4.4/lib/active_support/dependencies.rb:495:in `require'
     from /var/lib/gems/1.8/gems/activesupport-1.4.4/lib/active_support/dependencies.rb:342:in `new_constants_in'
     from /var/lib/gems/1.8/gems/activesupport-1.4.4/lib/active_support/dependencies.rb:495:in `require'
     from /home/www/visite/config/environment.rb:81
     from /usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
     from /usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `require'
     from /var/lib/gems/1.8/gems/activesupport-1.4.4/lib/active_support/dependencies.rb:495:in `require'
     from /var/lib/gems/1.8/gems/activesupport-1.4.4/lib/active_support/dependencies.rb:342:in `new_constants_in'
     from /var/lib/gems/1.8/gems/activesupport-1.4.4/lib/active_support/dependencies.rb:495:in `require'
     from /usr/lib/ruby/gems/1.8/gems/gems/mongrel-1.1.5/bin/../lib/mongrel/rails.rb:147:in `rails'
     from /usr/lib/ruby/gems/1.8/gems/gems/mongrel-1.1.5/bin/mongrel_rails:113:in `cloaker_'
     from /usr/lib/ruby/gems/1.8/gems/gems/mongrel-1.1.5/lib/mongrel/configurator.rb:149:in `call'
     from /usr/lib/ruby/gems/1.8/gems/gems/mongrel-1.1.5/lib/mongrel/configurator.rb:149:in `listener'
     from /usr/lib/ruby/gems/1.8/gems/gems/mongrel-1.1.5/bin/mongrel_rails:99:in `cloaker_'
     from /usr/lib/ruby/gems/1.8/gems/gems/mongrel-1.1.5/lib/mongrel/configurator.rb:50:in `call'
     from /usr/lib/ruby/gems/1.8/gems/gems/mongrel-1.1.5/lib/mongrel/configurator.rb:50:in `initialize'
     from /usr/lib/ruby/gems/1.8/gems/gems/mongrel-1.1.5/bin/mongrel_rails:84:in `new'
     from /usr/lib/ruby/gems/1.8/gems/gems/mongrel-1.1.5/bin/mongrel_rails:84:in `run'
     from /usr/lib/ruby/gems/1.8/gems/gems/mongrel-1.1.5/lib/mongrel/command.rb:212:in `run'
     from /usr/lib/ruby/gems/1.8/gems/gems/mongrel-1.1.5/bin/mongrel_rails:281
     from /var/lib/gems/1.8/gems/activesupport-1.4.4/lib/active_support/dependencies.rb:488:in `load'
     from /var/lib/gems/1.8/gems/activesupport-1.4.4/lib/active_support/dependencies.rb:488:in `load'
     from /var/lib/gems/1.8/gems/activesupport-1.4.4/lib/active_support/dependencies.rb:342:in `new_constants_in'
     from /var/lib/gems/1.8/gems/activesupport-1.4.4/lib/active_support/dependencies.rb:488:in `load'
     from /var/lib/gems/1.8/gems/rails-1.2.5/lib/commands/servers/mongrel.rb:60
     from /usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
     from /usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `require'
     from /var/lib/gems/1.8/gems/activesupport-1.4.4/lib/active_support/dependencies.rb:495:in `require'
     from /var/lib/gems/1.8/gems/activesupport-1.4.4/lib/active_support/dependencies.rb:342:in `new_constants_in'
     from /var/lib/gems/1.8/gems/activesupport-1.4.4/lib/active_support/dependencies.rb:495:in `require'
     from /var/lib/gems/1.8/gems/rails-1.2.5/lib/commands/server.rb:39
     from /usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
     from /usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `require'
     from script/server:3

Filed under  //   memcached   rails   ruby  

Comments [0]

Railsでmemcachedを使う - Memorandum

config/environment.rb

require 'memcache'
memcache_options
= {
 
:c_threshold => 10_000,
 
:compression => true,
 
:debug => false,
 
:namespace => ":app-#{RAILS_ENV}",
 
:readonly => false,
 
:urlencode => false
}
CACHE
= MemCache.new memcache_options
CACHE
.servers = 'localhost:11211'
ActionController::Base.session_options[:expires] = 1800
ActionController::Base.session_options[:cache] = CACHE

Filed under  //   memcached   rails  

Comments [0]

masuidrive on rails - RailsでMemcachedが落ちていてもエラーにならない方法

config/memcached.ymlで、「raise_errors: false」を指定するだけで、memcachedでエラーが起こった場合には、キャッシュを無視するようになるようです。

Filed under  //   configuration   memcached   rails  

Comments [0]

ヽ( ・∀・)ノくまくまー(2005-07-13)

Action caching 詳細

Pageと同じでキャッシュ対象はアクションの出力全部であるが、Fragment(後述)として保存される点と参照時に ActionPack を経由する点が Page とは異なる。つまり、キャッシュを渡す前に ActionPack へ制御がうつるため、そこで認証や制限を行う事が可能になる。

class BerryzController
  before_filter :authenticate, :except => :show  # filter は全部にかかるので show は除外する
  caches_page   :show
  caches_action :edit

  def authenticate
    unless @request.env["REMOTE_HOST"] == "127.0.0.1"
      redirect_to "/404.html"
    end
  end
end

キャッシュの削除には expire_action メソッドを利用する。

Filed under  //   ActionCaching   cache   memcached   rails  

Comments [0]