我的目标是缓存 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、cache.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/