gpt4 book ai didi

django - 如何手动清除/更新 Django 中的缓存 View

转载 作者:行者123 更新时间:2023-12-04 16:08:37 25 4
gpt4 key购买 nike

我的目标是缓存 View ,直到发生 View 缓存需要过期的事件,否则缓存 1 小时。这是我在 urls.py 中的内容

url(r'^get_some_stuff/$', cache_page(60 * 60, key_prefix='get_some_stuff')(views.StuffView.as_view())),

这工作正常。现在我试图获取缓存的 View 以验证那里有什么东西,我试过这个:
from django.core.cache import cache
cache.get('get_some_stuff')

但这会返回 None。我希望做这样的事情:
from django.core.cache import cache
#relevant event happened
cache.delete('get_some_stuff')

处理缓存的正确方法是什么?

我试过传递uri路径:
cache.get('/api/get_some_stuff/')

而且我仍然没有返回。
>>> cache.has_key('/api/get_some_stuff/')
False
>>> cache.has_key('/api/get_some_stuff')
False
>>> cache.has_key('get_some_stuff')
False

我已经查看了建议的答案,但它根本没有解决根本问题。它似乎不像传递 uri 路由路径作为键那么简单,因为键在 django 中有些抽象。

最佳答案

Django 的 Cache framework只允许在预定义的时间内缓存数据并清除过期的缓存数据,您可能需要使用 django-signals 来通知某些清除缓存的接收器函数。

而 cache.get、cache.has_key、c​​ache.delete 需要传递完整的 cache_key 而不是 url 或 key-prefix。由于 django 负责处理 key ,我们无法控制获取或删除数据。

如果您正在使用数据库缓存,那么在数据库表陈旧时使用原始 sql 查询从数据库表中删除缓存记录。编写一个查询,说从 cache_table 中使用 cache_key 删除,例如 ('%1:views.decorators.cache.cache_page%')

我在按 View 缓存时遇到了同样的问题,我选择了 low-level cache api .我使用 cache.set() 缓存了最终结果查询集,好的部分是您可以设置自己的 key 并使用它。

关于django - 如何手动清除/更新 Django 中的缓存 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47040438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com