2

我在我的 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:

对于 locmemcache

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
        'LOCATION': 'oglos-cache'
    }
}

对于内存缓存

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': '127.0.0.1:11211',
    }
}
4

2 回答 2

4

因为通过在类定义中对查询集进行切片,您已经对它进行了评估——在类定义时,即服务器启动时。所以缓存正在被刷新,但只有一组旧的项目。不要在类级别执行该切片:在从get_queryset.

于 2013-07-11T17:51:06.243 回答
0

我有同样的问题,我通过强制 django 不缓存我的视图来解决它:

from django.views.decorators.cache import cache_page
urlpatterns = [
    path('some_path', cache_page(0)(views.MyViewList.as_view()), name='view-list')
]
于 2020-05-29T19:44:03.947 回答