Django缓存如何删除“:1:”的键前缀

时间:2017-12-08 11:41:59

标签: django

我在Django中设置了一个缓存,如下所示:

cordova-android@7.0.0

它生成一个这样的键:

from django.core.cache import cache
...
cache.set("cae9ad31b9206a1b5594813b509e1003", "test", timeout=10)

如何从密钥中删除:1:cae9ad31b9206a1b5594813b509e1003 前缀?

1 个答案:

答案 0 :(得分:1)

您不必担心,因为这不会影响您get密钥价值的方式。

cache.get("cae9ad31b9206a1b5594813b509e1003")
# outputs
"test"

为什么会发生这种情况?

Django通过将您提供的key与缓存的version相结合来生成缓存密钥。

示例:

cache.set("my_key", "value", version=2)
# becomes
":2:my-key"

因为默认情况下version=1,这就是为什么在您的情况下它变为:1:cae9a...

这称为Cache Versioning。它很有用,因为这样您就可以拥有特定对象的多个缓存版本。

如何覆盖?

如果您仍想以任何理由覆盖此行为,则可以docs suggest执行此操作。

首先在这样的地方创建一个函数:

def my_key_maker(key, key_prefix, version):
    return key # just return the key without doing anything

然后,在CACHES设置中执行以下操作:

CACHES = {
    "default": {
        "BACKEND": ...,
        # other settings ...
        "KEY_FUNCTION": "path.to.my_key_maker"
    }
}