2

私のdjangoアプリでは、低レベルのキャッシュAPIを使用しています

from django.core.cache import cache

キャッシュ全体をクリアする代わりに、特定のキーを削除する必要がある状況があります。ここでの問題は、キー名がわからないことです -but only that the keyname starts with a particular username string

たとえばdamon_my222cachekey、キャッシュに存在するキーです。文字列で始まることしかわかりません。その特定の文字列で始まるdamon_ キャッシュを特定する方法はありますか?delete a key

cache.keys() のようなメソッドがあれば、正規表現を使用して、返されたリストからキー名を取得できたはずです

どんな助けでも大歓迎

4

1 に答える 1

2

これを行う唯一の方法は、2 レベルのキャッシュを作成することです。このアプローチでは、実際にはキーを削除しませんが、アクセスできなくします (キャッシュはしばらくすると自動的に削除されます)。

def get_user_version(username):
    version = cache.get("%s_version" % username)
    if version is None:
        version = random.randint(1, 1000000000)
        cache.set("%s_version" % username, version)
    return version

def get_user_cache(username, key):
    version = get_user_version(username)
    return cache.get("%s_%d_%s" % (username, version, key))

def set_user_cache(username, key, value):
    version = get_user_version(username)
    cache.set("%s_%d_%s" % (username, version, key), value)

def invalidate_user_cache(username):
    version = cache.incr("%s_version" % username)

利点は、ユーザーのキャッシュを簡単に無効にできることです。欠点は、1 つではなく 2 つのキャッシュ要求を作成することです。

于 2012-06-13T20:03:58.767 に答える