現在あるシステムで、memcachedのバックアップとしてTokyoTyrantを利用しています。
以下は、主要な部分だけを抜粋したコードです。
$key = 'hello';
//Pecl::memcached
$value = MyMemcached::get($key);
if($value === false):
//memcacheから取得できないときはTokyoTyrantからの取得を試みる
MyTokyoTyrant::initialize();
if(MyTokyoTyrant::getEnabled() === true):
$value = MyTokyoTyrant::get($key);
$hasTTCache = (!$value) ? false : true;
else:
$hasTTCache = false;
endif;
//TokyoTyrantからも取得できないときはMySQL
if($hasTTCache === false):
$value = self::getByIdWithConnection($key);
MyTokyoTyrant::set($key, $value, 0);
endif;
MyMemcached::set($key, $value);
endif;
システムの前提として、
- 設備が非常に貧弱である
- キャッシュサーバはなく、APサーバと同居したプロセスが用途別に1プロセスずつあるのみ
- memcachedを利用するプログラムの構成が適切ではない
- PHPのクライアント「Pecl::Memcache」がmgetに対応していない影響で、1データごとにgetを繰り返す構成になっている。順次「Pecl::Memcached」のgetMultiに置き換え中
という問題点があります。
どちらも現在根本的な修正に向けて作業中ですが、今日始めて明日実装というわけにはいかない(特にサーバの増強)ので、なんとか「誤魔化」さないといけません。というわけで試行錯誤の末、TokyoTyrantを併用する形になっています。
続きを読む