たとえば、次のような同じプレフィックスを持つキャッシュされたアイテムがいくつかあります
'app_111111', 'app_222222', 'app_333333', ...
このような「app_xxxxxx」アイテムを memcached コマンドで削除できますか?
Memcached はこの機能をそのままでは提供しないため、自分で構築する必要があります。
これを解決する方法は、アプリケーションでキーのグループのプレフィックス (または名前空間) を定義することです。memcached で設定したキーには、その前にそのプレフィックスがあります。Memcached から何かを「削除」したいときはいつでも、プレフィックスを変更するだけです。Memcached でキーを検索するときはいつでも、そのプレフィックスを追加します。
あなたの場合、プレフィックスをたとえば に設定することから始めることができるMyAppPrefix1
ので、キーは , として保存されMyAppPrefix1::app_333333
ますMyAppPrefix1::app_444444
。
後でこれらのエントリを「削除」する場合は、アプリケーションで を使用するように設定しますMyAppPrefix2
。次に、Memcached から というキーを取得しようとすると、キーが削除されたかのように検索されますが、最初は見つかりませんapp_333333
。MyAppPrefix2::app_333333
PHPでこの関数はどうですか:
function deletekeysbyindex($prefix) {
$m = new Memcached();
$m->addServer('localhost', 11211);
$keys = $m->getAllKeys();
foreach ($keys as $index => $key) {
if (strpos($key,$prefix) !== 0) {
unset($keys[$index]);
} else {
$m->delete($key);
}
}
return $keys;
}
$prefix で始まるキーを削除し、削除されたすべてのキーのリストを返します。共有サーバーで 30,000 以上のキーに対してこれを実行したところ、非常に高速でした (おそらく 1 秒未満)。