2

キャッシュ キーの部分文字列を含む (この場合は先頭から始まる) キャッシュ ストア内のすべてのエントリを削除しようとしていますが、これを行う簡単な方法がわかりません。Memcache をバックエンドとして使用しています。

コードを正しく理解していれば、deleteorを呼び出すときに完全なキャッシュ キーを渡す必要がありdelete_manyます。これを行う他の方法はありますか?

より良い方法がある場合に備えて、何をしようとしているのかを説明します。特定のユーザーが設定を変更したときに、そのユーザーのキャッシュをクリアする必要があります。でキャッシュをクリアするとclear()、すべてのユーザーのキャッシュ エントリ (約 110K) が削除されるため、使用したくありません。

key_prefixユーザーの ID、リクエストのパス、およびその他の変数を使用して生成しています。キャッシュ キーは常に、認証されたユーザーの ID で始まります。理想的には、次のようなものを使用しますdelete_many(user_id + ".*")

4

1 に答える 1

1

Memcache は分散ハッシュとして設計されているため、サポートされていません。検索用に格納されたキーのインデックスはありません。

理想的には、キーにどのサフィックスがあるかを知っておく必要があります。そうでない場合は、ユーザーの特別なキーでインデックスを自分で維持できます。キーのリストuser_id + '_keys'を含むのと同じように。このようにして、キーごとに循環させ、ユーザーのすべてのキャッシュを削除できます。

関数をオーバーライドして、.setこの新しいキーを管理できます。

于 2015-03-10T15:44:23.333 に答える