29

たとえば、次のような同じプレフィックスを持つキャッシュされたアイテムがいくつかあります

'app_111111', 'app_222222', 'app_333333', ...

このような「app_xxxxxx」アイテムを memcached コマンドで削除できますか?

4

4 に答える 4

40

Memcached はこの機能をそのままでは提供しないため、自分で構築する必要があります。

これを解決する方法は、アプリケーションでキーのグループのプレフィックス (または名前空間) を定義することです。memcached で設定したキーには、その前にそのプレフィックスがあります。Memcached から何かを「削除」したいときはいつでも、プレフィックスを変更するだけです。Memcached でキーを検索するときはいつでも、そのプレフィックスを追加します。

あなたの場合、プレフィックスをたとえば に設定することから始めることができるMyAppPrefix1ので、キーは , として保存されMyAppPrefix1::app_333333ますMyAppPrefix1::app_444444

後でこれらのエントリを「削除」する場合は、アプリケーションで を使用するように設定しますMyAppPrefix2。次に、Memcached から というキーを取得しようとすると、キーが削除されたかのように検索されますが、最初は見つかりませんapp_333333MyAppPrefix2::app_333333

于 2012-05-29T02:13:16.257 に答える
7

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 秒未満)。

于 2014-08-06T18:50:14.583 に答える