Cache::Memcached(::Fast) のオプションには namespace というのがあります。
https://metacpan.org/module/Cache::Memcached::Fast
https://metacpan.org/module/Cache::Memcached
Cache::Memcached、Cache::Memcached::Fast、どちらもnamespaceはインスタンス作成時に指定して、あとから変更することは出来ません。
my $s = Cache::Memcached::Fast->new({
servers => [qw/127.0.0.1:11211/],
namespace => 'myservice'
});
namespaceを使うと、ひとつのmemcachedサーバを複数のアプリケーションから使用する場合などに、それぞれ別のネームスペースを指定しておく事でキャッシュのキーが被らないようにできます。
このnamespaceですが、キャッシュキーとの連結は
$key = "$prefix$key";
という感じで間に何も入りません。なのでハッシュ値なキャッシュキーと組み合わせると
myservicee2fc714c4727ee9395f324cd2e7f331f
となり、どこからどこまでがprefixなのか解らなくなります。アプリケーションからは全く問題ないのですが、pt-query-digest(2.1系、2.2以降はmemcachedプロトコルは扱わなくなった)などで見た時にアレ?っとなり易いです。
参考: 僕らがmemcachedのキャッシュキーにsha1やmd5のhash値を使うを避ける理由
ですので、
my $s = Cache::Memcached::Fast->new({
servers => [qw/127.0.0.1:11211/],
namespace => 'myservice|'
});
のように何か区切りとなる文字で終わっているとよろしいかと思います。
ところで、新し目のmemcachedには起動オプションに -D というのがあります。
-D <char> Use <char> as the delimiter between key prefixes and IDs.
This is used for per-prefix stats reporting. The default is
":" (colon). If this option is specified, stats collection
is turned on automatically; if not, then it may be turned on
by sending the "stats detail on" command to the server.
これを使うと、prefix毎の統計情報を出力することができます。
$ /path/to/memcached -D '|' -vv
このように起動して、namespaceを変えながら何度かアクセスしてみます。
for my $namespace ( 1..10 ) {
my $s = Cache::Memcached::Fast->new({
servers => [qw/127.0.0.1:11211/],
namespace => sprintf('p%03d|',$namespace)
});
for my $key ( 1..100 ) {
$s->set($key,'xxx');
$s->get($key,'xxx');
}
}
そうして、telnetを使って統計情報を出します。
$ telnet localhost 11211
Trying ::1...
Connected to localhost.
Escape character is '^]'.
stats detail dump
PREFIX p005 get 100 hit 100 set 100 del 0
PREFIX p001 get 100 hit 100 set 100 del 0
PREFIX p006 get 100 hit 100 set 100 del 0
PREFIX p010 get 100 hit 100 set 100 del 0
PREFIX p009 get 100 hit 100 set 100 del 0
PREFIX p008 get 100 hit 100 set 100 del 0
PREFIX p002 get 100 hit 100 set 100 del 0
PREFIX p004 get 100 hit 100 set 100 del 0
PREFIX p007 get 100 hit 100 set 100 del 0
PREFIX p003 get 100 hit 100 set 100 del 0
END
prefix(namespace)毎に簡単な統計がでてきました。
-D オプションのデフォルトは「:」になっていますが、-D が指定されていない場合、統計がでません。その場合は「stats detail
on」コマンドを実行する必要があるようです。