2011-02-03 5 views

答えて

18

申し訳ありませんが、 Memcachedは、明らかにランダムな場所にキーを配布するハッシュアルゴリズムを使用しているため、これらのキーはすべて散在しています。あなたはそれらを見つけるためにすべてをスキャンする必要があります。

また、memcachedは何らかの理由でいつでも任意のキーを削除できることに注意してください。あなたが何かを入れているなら、あなたはそれが戻って来ることに依存することができないことに気づくべきです。これは、データベースのヒットを減らすためのキャッシュである、元のユースケースではまったく問題ありません。しかし、もっと複雑なことをしたいのなら、それは深刻な問題になる可能性があります。

これらの制限が問題になる場合は、代わりにRedisを使用することをお勧めします。 memcachedのように動作しますが、データを保持し、複雑なデータ構造を格納することができます。したがって、あなたの場合、Redisにハッシュを格納し、後でハッシュ全体を引き出すことができます。

3

名前空間を使用して必要なものを実行できます。ここでは同じことを実行するPHPライブラリです。同じMemcachedを複数のアプリケーションに使用できます。

https://github.com/vijayabose/n_memcached

4

@btilly memcachedはネイティブにこれをしないと言うで正しいですが、あなたはその後、すべてのエントリを取得することができ、あなたの接頭辞を共有キーのインデックスを維持することによって(非常に効率的に)それをエミュレートすることができます特定の接頭辞に一致する

これは明らかに、任意のデータではなく、事前に選択した特定のキーに対してのみ機能しますが、その制限を満たせば実用的です。 memcache開発者の1人がa good article on this subjectです。

3

特定のキーが存在する場合は、検索するための簡単なコマンドでは、(キー名は「grepの正規表現」することができます)

for i in {1..40}; do (echo "stats cachedump $i 0"; sleep 1; echo "quit";) | telnet localhost 11211 | grep 'APREFIX*\|ANOTHERPREFIX*'; done 
での議論をもと)
  • ; | 'ANOTHERPREFIX * * \ APREFIX' 1から40
  • へのスラブは、grepの部分をお見逃しなく
  • 関連する問題