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

cra*_*wan 3 django

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

from django.core.cache import cache
...
cache.set("cae9ad31b9206a1b5594813b509e1003", "test", timeout=10)
Run Code Online (Sandbox Code Playgroud)

它生成一个这样的密钥:

:1:cae9ad31b9206a1b5594813b509e1003
Run Code Online (Sandbox Code Playgroud)

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

xyr*_*res 5

你不必担心它,真的,因为这不会影响你如何get获得一个键的值。

cache.get("cae9ad31b9206a1b5594813b509e1003")
# outputs
"test"
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

Django 通过将key您提供的 与缓存的 组合来生成缓存键version

例子:

cache.set("my_key", "value", version=2)
# becomes
":2:my-key"
Run Code Online (Sandbox Code Playgroud)

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

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


如何覆盖这个?

如果您出于任何原因仍想覆盖此行为,您可以按照文档建议进行操作

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

def my_key_maker(key, key_prefix, version):
    return key # just return the key without doing anything
Run Code Online (Sandbox Code Playgroud)

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

CACHES = {
    "default": {
        "BACKEND": ...,
        # other settings ...
        "KEY_FUNCTION": "path.to.my_key_maker"
    }
}
Run Code Online (Sandbox Code Playgroud)