首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django缓存如何删除键前缀":1:“

Django缓存如何删除键前缀":1:“
EN

Stack Overflow用户
提问于 2017-12-08 11:41:59
回答 1查看 4K关注 0票数 7

我在Django中设置了如下缓存:

代码语言:javascript
复制
from django.core.cache import cache
...
cache.set("cae9ad31b9206a1b5594813b509e1003", "test", timeout=10)

它生成如下所示的密钥:

代码语言:javascript
复制
:1:cae9ad31b9206a1b5594813b509e1003

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-08 12:28:36

您不需要担心它,真的,因为这并不影响您如何get一个键的值。

代码语言:javascript
复制
cache.get("cae9ad31b9206a1b5594813b509e1003")
# outputs
"test"

为什么会发生这种事?

Django通过将提供给它的key与缓存的version组合起来生成缓存密钥。

示例:

代码语言:javascript
复制
cache.set("my_key", "value", version=2)
# becomes
":2:my-key"

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

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

如何覆盖这个?

如果您仍然希望以任何理由重写此行为,则可以作为医生建议进行。

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

代码语言:javascript
复制
def my_key_maker(key, key_prefix, version):
    return key # just return the key without doing anything

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

代码语言:javascript
复制
CACHES = {
    "default": {
        "BACKEND": ...,
        # other settings ...
        "KEY_FUNCTION": "path.to.my_key_maker"
    }
}
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47713718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档