1

たとえば、ユーザーの最新の 10 件の投稿タイトル、最新の 100 件、最新の 200 件の投稿タイトルなど、同様のデータに対してわずかに異なる情報セットをキャッシュするとします。

私はこのようなものを持っています:

cache.set('posts' + user_id + num_posts, DATA, 30)

したがって、ユーザーIDが123であると仮定すると、posts12310(10投稿分)、posts12320(20投稿分)などをキャッシュすることになります

クエリ文字列から num_posts を取得します。

ユーザーが新しい投稿を追加すると、キーが で始まるすべてのキャッシュなど、彼に関連するキャッシュされたすべてのクエリを無効にしたいと考えています。その方法は? posts123

また、これは、ブログ投稿のタイトルではなく、大きなデータが関係する私の本当の問題を単純化したものですが、問題の核心は同じです。グループ全体を無効にできるように、キャッシュ アイテムをグループ化する方法です。また、デコレータは使用していませんが、下位レベルの API を使用する必要があります。

ありがとう

4

1 に答える 1

2

同じデータの多数のサブセットをキャッシュに格納しないでください。必要な投稿の最大数 (つまり 200) を 1 つの値に格納し、キャッシュ do リスト スライスからデータを取得した後、必要な数の結果を取得します。

DATA = [<200 last posts here>]
cache.set('posts' + user_id, DATA, 30)  # Store everything

このようにすると、キーが 1 つだけになるため、キャッシュを簡単に無効にすることができ、キャッシュに保存するデータも少なくなります。

# Get all cached posts and slice 10 first items 
cache.get('posts' + user_id)[0:10]

# Get all cached posts and slice 100 first items 
cache.get('posts' + user_id)[0:100]

キャッシュに要求された値よりも少ない場合を処理する必要があることに注意してください)

于 2013-05-27T10:38:01.790 に答える