web-dev-qa-db-ja.com

memcachedに設定されているすべてのキーを取得する

Memcachedインスタンスに設定されているすべてのキーを取得するにはどうすればよいですか?

私はグーグルで試しましたが、PHPgetAllKeys method をサポートしていることを除いて、多くは見つかりませんでした。つまり、実際に何らかの方法でこれを行うことができます。 telnetセッション内で同じようにするにはどうすればよいですか?

memcached cheat sheet および Memcached telnetコマンドの概要 に記載されているすべての取得関連オプションを試しましたが、いずれも機能せず、正しい方法を見つけることができません。これをする。

注:現在、開発中にこれを行っているため、新しいキーが設定されたり、競合状態が発生したりしても問題は発生せず、キーの数も制限されます。

113
mu 無

リンクはこちら (元の 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 
 
154
mu 無

memdump

そのためのmemdumpコマンドがあります(Ubuntuのmemcdumplibmemcached-toolsの一部)、例えば:

memdump --servers=localhost

すべてのキーが返されます。


memcached-tool

memcachedの最近のバージョンには、memcached-toolコマンドもあります。

memcached-tool localhost:11211 dump | less

すべてのキーと値をダンプします。

こちらもご覧ください:

52
kenorb

@ 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キャッシュサーバーに対応できない場合があります。ただし、ローカルマシンでデバッグする場合には便利です。

15
Omar Al-Ithawi

PHPとPHP-memcachedがインストールされている場合は、実行できます

$ php -r '$c = new Memcached(); $c->addServer("localhost", 11211); var_dump( $c->getAllKeys() );'
9

Bash

Bashのキーのリストを取得するには、次の手順を実行します。

まず、次のラッパー関数を定義して、使いやすくします(コピーしてシェルに貼り付けます)。

function memcmd() {
  exec {memcache}<>/dev/tcp/localhost/11211
  printf "%s\n%s\n" "$*" quit >&${memcache}
  cat <&${memcache}
}

Memcached 1.4.31以降

lru_crawler metadump allコマンドを使用して、キャッシュ内のアイテム(すべて)のメタデータ(ほとんど)をダンプできます。

cachedumpとは対照的に、深刻なパフォーマンスの問題は発生せず、ダンプできるキーの量に制限はありません。

前に定義した関数を使用したコマンドの例:

memcmd lru_crawler metadump all

ReleaseNotes1431 を参照してください。


Memcached 1.4.30以下

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 cachedumpHOT_LRU(IIRC?)のみをダンプします。これは、アクティビティが発生するとバックグラウンドスレッドによって管理されます。これは、2Qアルゴが有効にした新しい十分なバージョンの下で、LRUの1つに含まれるもののスナップショットビューを取得することを意味します。

すべてを表示する場合、lru_crawler metadump 1(またはlru_crawler metadump all)は、必要に応じて多くのキーを非同期的にダンプする、ほとんど公式にサポートされている新しいメソッドです。順序は狂いますが、すべてのLRUにヒットします。アイテムを削除/置換しない限り、複数の実行で同じ結果が得られます。

ソース: GH-405


関連:

7
kenorb

最も簡単な方法は、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',
 ... ]
5
abhishek_M