Django缓存不会刷新

时间:2013-07-11 17:38:35

标签: django caching

我已经为我的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',
    }
}

2 个答案:

答案 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')
]