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

标签 django caching

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

相关文章:

jquery - Rails 中没有缓存时间戳的资源 URL

ASP.net 应用程序 session 缓存最佳实践和模式

python - 编写具有访问 Django 数据库功能的 Python 程序的最简单方法

python - Django:如何在模板的 if 语句中使用变量?

python/django - html 选择列表中的 bidi 括号问题

android - Android中如何高效存储位图?

javascript - 使用 Parse Javascript SDK 缓存查询

javascript - 在浏览器中使用 Bootstrap 和 ReactJS

python - 如何根据 Django 中的字段向某些用户添加特定权限 View ?

c# - System.Runtime.Caching.MemoryCache 在被逐出时会处理 IDisposable 项目吗?