22

memcachedにたくさんのキー/値を書き込んでいます->PREFIX_KEY1、PREFIX_KEY2、PREFIX_KEY3

PREFIX_で始まるすべてのキーを取得する必要があります

出来ますか?

4

4 に答える 4

26

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

また、設計上、memcachedは、理由を問わず、いつでも任意のキーをドロップできることに注意してください。あなたが物を入れているなら、あなたはそれが戻ってくることに頼ることができないことに注意する必要があります。これは、元のユースケースであるデータベースへのヒットを減らすためのキャッシュにはまったく問題ありません。しかし、もっと複雑なことをしたい場合は、深刻な問題になる可能性があります。

これらの制限が問題になる場合は、代わりにRedisを使用することをお勧めします。データを永続化し、複雑なデータ構造を保存できることを除けば、memcachedとよく似た動作をします。したがって、ユースケースでは、ハッシュをRedisに保存し、後でハッシュ全体を引き出すことができます。

于 2011-02-03T17:58:21.803 に答える
7

特定のキーが存在するかどうかを検索するためのクイックコマンド(キー名は「grep正規表現」にすることができます)

for i in {1..40}; do (echo "stats cachedump $i 0"; sleep 1; echo "quit";) | telnet localhost 11211 | grep 'APREFIX*\|ANOTHERPREFIX*'; done
于 2016-04-20T08:16:06.930 に答える
6

@btillyは、memcachedがこれをネイティブに行わないという点で正しいですが、プレフィックスを共有するキーのインデックスを維持することで(非常に効率的に)エミュレートでき、特定のプレフィックスに一致するすべてのエントリをフェッチできます。

明らかに、これは事前に選択した特定のキーに対してのみ機能し、任意のデータに対しては機能しませんが、その制限に耐えられる場合は非常に機能します。memcache開発者の1人によるこのテーマに関する良い記事があります。

于 2014-02-14T18:16:44.207 に答える
4

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

https://github.com/vijayabose/n_memcached

于 2012-10-18T08:12:45.687 に答える