如何手动清除/更新 django 中的缓存视图

Stu*_*Cat 5 django caching

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

url(r'^get_some_stuff/$', cache_page(60 * 60, key_prefix='get_some_stuff')(views.StuffView.as_view())),
Run Code Online (Sandbox Code Playgroud)

这很好用。现在我尝试获取缓存的视图以验证其中是否有内容,我尝试了以下操作:

from django.core.cache import cache
cache.get('get_some_stuff')
Run Code Online (Sandbox Code Playgroud)

但这返回 None。我希望做这样的事情:

from django.core.cache import cache
#relevant event happened
cache.delete('get_some_stuff')
Run Code Online (Sandbox Code Playgroud)

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

我尝试过传递 uri 路径:

cache.get('/api/get_some_stuff/')
Run Code Online (Sandbox Code Playgroud)

我仍然没有得到回报。

>>> cache.has_key('/api/get_some_stuff/')
False
>>> cache.has_key('/api/get_some_stuff')
False
>>> cache.has_key('get_some_stuff')
False
Run Code Online (Sandbox Code Playgroud)

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

PVS*_*VSK 1

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

并且cache.get、cache.has_key、c​​ache.delete 需要传递完整的cache_key,而不是url 或key-prefix。由于 django 负责处理密钥,因此我们没有太多控制权来获取或删除数据。

如果您正在使用数据库缓存,则使用原始 SQL 查询在数据库表过时时从数据库表中删除缓存记录。编写一个查询,表示使用cache_key从cache_table中删除,如('%1:views.decorators.cache.cache_page%')

我在每个视图缓存方面遇到了同样的问题,并且我使用了低级缓存 api。我使用cache.set() 缓存了最终结果查询集,好的一点是您可以设置自己的密钥并使用它。