我的目标是缓存视图,直到发生视图缓存需要过期的事件为止,否则缓存 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 中有些抽象。
Django 的缓存框架只允许在预定义的时间内缓存数据,并且要清除过期的缓存数据,您可能需要使用 django-signals 来通知某些清除缓存的接收器函数。
并且cache.get、cache.has_key、cache.delete 需要传递完整的cache_key,而不是url 或key-prefix。由于 django 负责处理密钥,因此我们没有太多控制权来获取或删除数据。
如果您正在使用数据库缓存,则使用原始 SQL 查询在数据库表过时时从数据库表中删除缓存记录。编写一个查询,表示使用cache_key从cache_table中删除,如('%1:views.decorators.cache.cache_page%')
我在每个视图缓存方面遇到了同样的问题,并且我使用了低级缓存 api。我使用cache.set() 缓存了最终结果查询集,好的一点是您可以设置自己的密钥并使用它。
归档时间: |
|
查看次数: |
4776 次 |
最近记录: |