我已经为我的Web应用程序添加了一个简单的缓存,当我删除或添加新对象时,缓存在我设置的时间(2分钟)之后不会刷新。
看起来好像冻结了。当我重新启动我的应用程序时,它会刷新。
我在memached和locmemcache上尝试过它。
INDEX_LIST_CACHE_KEY = "index_list_cache_key"
class IndexView(BaseView):
queryset = Advert.objects.all().select_related('category', 'location')[:25]
template_name = "adverts/category_view.html"
def get_queryset(self):
queryset = cache.get(INDEX_LIST_CACHE_KEY)
if queryset is None:
queryset = self.queryset
cache.set(INDEX_LIST_CACHE_KEY, queryset, 2 * 60)
return queryset
为什么缓存的行为类似于此项目?
编辑 - settings.py:
for locmemcache
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'LOCATION': 'oglos-cache'
}
}
用于memcached
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
}
}
答案 0 :(得分:4)
因为通过在类定义中对查询集进行切片,您已经在类定义时,即在服务器启动时对其进行了评估。因此缓存正在刷新,但只有一组旧项目。不要在类级别执行该切片:从get_queryset
返回结果时执行此操作。
答案 1 :(得分:0)
我遇到了同样的问题,我通过强制django不缓存我的视图来解决了这个问题:
from django.views.decorators.cache import cache_page
urlpatterns = [
path('some_path', cache_page(0)(views.MyViewList.as_view()), name='view-list')
]