Memcachedインスタンスに設定されているすべてのキーを取得するにはどうすればよいですか?
私はグーグルで試しましたが、PHP
が getAllKeys
method をサポートしていることを除いて、多くは見つかりませんでした。つまり、実際に何らかの方法でこれを行うことができます。 telnetセッション内で同じようにするにはどうすればよいですか?
memcached cheat sheet および Memcached telnetコマンドの概要 に記載されているすべての取得関連オプションを試しましたが、いずれも機能せず、正しい方法を見つけることができません。これをする。
注:現在、開発中にこれを行っているため、新しいキーが設定されたり、競合状態が発生したりしても問題は発生せず、キーの数も制限されます。
リンクはこちら (元の Googleグループのディスカッションはこちら )のおかげで道を見つけました
まず、サーバーへのTelnet
:
telnet 127.0.0.1 11211
次に、アイテムをリストしてスラブIDを取得します。
stats items STAT items:3:number 1 STAT items:3:age 498 STAT items:22:number 1 STAT items :22:age 498 END
「アイテム」の後の最初の番号はスラブIDです。ダンプするキーの最大数を制限して、各スラブIDのキャッシュダンプを要求します。
stats cachedump 3 100 ITEM views.decorators.cache.cache_header..cc7d9 [6 b; 1256056128 s] END stats cachedump 22 100 ITEM views.decorators.cache.cache_page..8427e [7736 b; 1256056128 s] END
memdump
そのためのmemdump
コマンドがあります(Ubuntuのmemcdump
、libmemcached-tools
の一部)、例えば:
memdump --servers=localhost
すべてのキーが返されます。
memcached-tool
memcached
の最近のバージョンには、memcached-tool
コマンドもあります。
memcached-tool localhost:11211 dump | less
すべてのキーと値をダンプします。
こちらもご覧ください:
@ mu無 ここに答えてください。キャッシュダンプスクリプトを作成しました。
このスクリプトは、memcachedサーバーのすべてのコンテンツをダンプします。 Ubuntu 12.04およびlocalhost memcachedでテストされているため、使用するマイル数は異なる場合があります。
#!/usr/bin/env bash
echo 'stats items' \
| nc localhost 11211 \
| grep -oe ':[0-9]*:' \
| grep -oe '[0-9]*' \
| sort \
| uniq \
| xargs -L1 -I{} bash -c 'echo "stats cachedump {} 1000" | nc localhost 11211'
それが行うことは、すべてのキャッシュスラブを通過し、それぞれの1000エントリを印刷します。
このスクリプトの特定の制限に注意してください。たとえば、5GBキャッシュサーバーに対応できない場合があります。ただし、ローカルマシンでデバッグする場合には便利です。
PHPとPHP-memcachedがインストールされている場合は、実行できます
$ php -r '$c = new Memcached(); $c->addServer("localhost", 11211); var_dump( $c->getAllKeys() );'
Bashのキーのリストを取得するには、次の手順を実行します。
まず、次のラッパー関数を定義して、使いやすくします(コピーしてシェルに貼り付けます)。
function memcmd() {
exec {memcache}<>/dev/tcp/localhost/11211
printf "%s\n%s\n" "$*" quit >&${memcache}
cat <&${memcache}
}
lru_crawler metadump all
コマンドを使用して、キャッシュ内のアイテム(すべて)のメタデータ(ほとんど)をダンプできます。
cachedump
とは対照的に、深刻なパフォーマンスの問題は発生せず、ダンプできるキーの量に制限はありません。
前に定義した関数を使用したコマンドの例:
memcmd lru_crawler metadump all
ReleaseNotes1431 を参照してください。
items statistics コマンドを使用して、スラブのリストを取得します。例:
memcmd stats items
各スラブクラスについて、制限番号(0
-無制限)とともにスラブIDを指定することにより、アイテムのリストを取得できます。
memcmd stats cachedump 1 0
memcmd stats cachedump 2 0
memcmd stats cachedump 3 0
memcmd stats cachedump 4 0
...
注:memcachedサーバーごとにこれを行う必要があります。
すべてのスタブからすべてのキーをリストするには、1つのライナー(1つのサーバーにつき)があります。
for id in $(memcmd stats items | grep -o ":[0-9]\+:" | tr -d : | sort -nu); do
memcmd stats cachedump $id 0
done
注:上記のコマンドは、アイテムへのアクセス中に深刻なパフォーマンスの問題を引き起こす可能性があるため、ライブで実行することはお勧めしません。
ノート:
stats cachedump
はHOT_LRU
(IIRC?)のみをダンプします。これは、アクティビティが発生するとバックグラウンドスレッドによって管理されます。これは、2Qアルゴが有効にした新しい十分なバージョンの下で、LRUの1つに含まれるもののスナップショットビューを取得することを意味します。すべてを表示する場合、
lru_crawler metadump 1
(またはlru_crawler metadump all
)は、必要に応じて多くのキーを非同期的にダンプする、ほとんど公式にサポートされている新しいメソッドです。順序は狂いますが、すべてのLRUにヒットします。アイテムを削除/置換しない限り、複数の実行で同じ結果が得られます。
ソース: GH-405 。
関連:
protocol.txt
docsファイルを確認してください。最も簡単な方法は、python-memcached-statsパッケージを使用することです https://github.com/abstatic/python-memcached-stats
Keys()メソッドを使用すると、うまくいきます。
例-
from memcached_stats import MemcachedStats
mem = MemcachedStats()
mem.keys()
['key-1',
'key-2',
'key-3',
... ]