id:kazuhooku さんがかつて作った KeyedMutex を memcached でやってしまおうと言うのがこのモジュールの目的です。 KeyedMutex の場合は、keyedmutexd と言うそれ専用の daemon を立ち上げなければいけませんが、このモジュールの場合は既存のシステムに memcached があれば普通に使えます。 trial を 0 にすると timeout で lock が expire するか、誰かが lock を開放するまで延々と lock の獲得が出来るまでビジーループします。一方で trial を有限の正整数とすると、その試行回数で lock が獲得出来ない場合は即座に諦めます。 正規の使い方としては lock を獲得出来るのが同時に1クライアントのみで他はそれが開放されるまで待たせると言うのが正解ですが、ちょっと変わった使い方としては、例えば
一番簡単に高速化するには シリアライザをData::MesagePackにするとよいかもしれない。 #! /usr/bin/perl use strict; use warnings; use Cache::Memcached::Fast; use Data::MessagePack; use Benchmark qw/timethese/; my $normal = Cache::Memcached::Fast->new({ servers => ['127.0.0.1:11211'], serialize_methods => [ \&Storable::freeze, \&Storable::thaw ], }); my $msgpack = Cache::Memcached::Fast->new({ servers => ['127.0.0.1:11211'], serialize
Cache::Memcached(::Fast)を使う上でベストプラクティスをまとめたモジュールを書いてみた。名前は、Cache::Memcached::IronPlate。おのみち焼き。 githubにあります。ドキュメントが日本語だけです: https://github.com/kazeburo/Cache-Memcached-IronPlate つかいかた use Cache::Memcached::IronPlate; use Cache::Memcached::Fast; my $memd = Cache::Memcached::IronPlate->new( cache => Cache::Memcached::Fast->new(...). ); $memd->get $memd->get_multi $memd->set $memd->add $memd->replace
やや大袈裟な名前ですが「memcachedにおけるキャッシュシステムの Thundering Herd 問題への対策案」とか「キャッシュシステムの Thundering Herd 問題への対策案。その2 排他制御」で書いていたコードをモジュールにした github: https://github.com/kazeburo/Cache-Isolator 機能としては、平行動作数を制御できるget_or_setと、一定の確率で少し早く有効期限が切れるキャッシュの保存、取得、削除あたりがあげられます 使い方ですが、まず、get_or_setの例。 my $isolator = Cache::Isolator->new( cache => Cache::Memcached::Fast->new(...), concurrency => 4, # get_or_setのcallbackの最大平行動作
第三回の紹介をしない間に、連載「memcachedの活用と運用 実践編」の最終回が公開されました。最終回は、memcachedを多く運用してきた経験から得た小さめのTIPSをいくつか紹介する回となっています。 言語依存の話になるので詳しくは書きませんでしたが、記事中のincrementのサンプルで my $result = $memd->incr($key, @_); if ( defined $result && ! $result ) { ... } このように冗長にみえる条件文になっていますが、このdefinedと!$resultの意味はCache::Memcached::Fastのドキュメントを読むと解ります。 Return: unsigned integer, new value for the $key, or false for negative server reply,
Data::Model::Driver::Memcachedで超効率データ保存 - JPerl Advent Calendar 2009 Perl に関するちょっとした Tips をのっけてみるよ。ちゃんと続くかな? はじめに YAPC::Asia 2009で、Data::Modelの話を聞いて以来、Data::Modelがとても気になっているdannです。 今回は、Data::Model::Driver::Memcachedについて紹介します。これは、Memcachedプロトコルを話すサーバーにデータを格納するためのDriverです。これの素晴らしいところは、空間効率を高めることを考えて設計されていて、かつアプリケーション側のコードは綺麗にかける工夫がなされているという点です。 では、どこにその工夫があるかをみていきましょう。 Data::Model::Driver::Memcached
Cache::Memcached::Retry - servers の数だけ勝手に retry Cache::Memcached って servers を複数設定してて、どれか落ちてるサーバに当たった時に最初undef返して、次の接続からrehashされたサーバに接続するんだけど、落ちてるサーバに最初に当たったの時のundef帰ってくるのが嫌なので、undef帰って来たらserversの数だけretryを試みるようなラッパーを作った。 get_multiは、これが欲しい用途では使わないし面倒なので未実装。 package Cache::Memcached::Retry; use strict; use warnings; use base 'Cache::Memcached'; for my $name (qw/ set add replace delete get /) { no str
最近のWebシステム開発ではキャッシュを使うケースが増えつつある。各種Webアプリケーション向けフレームワークでもキャッシュをデフォルトでサポートしているものも多く、その筆頭に挙げられるのがmemcachedだ。 top風にmemcachedのステータスが確認できる memcachedは軽量で、あると便利だと思える機能が殆ど実装されていない。ステータスを監視するような機能もないが、そこは独自に開発されたmemcache-topを使えば解決する。 今回紹介するオープンソース・ソフトウェアはmemcache-top、memcachedのステータスを表示するコマンドラインスクリプトだ。 memcache-topはPerlで作られたスクリプトで、既に立ち上がっているmemcachedサーバを一覧し、そのステータスを表示してくれる。デフォルトで3秒ごとにリフレッシュされるようになっており、topコマ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く