如何在Django中构建类似Slack的左侧面板以最小化数据库访问

时间:2017-01-30 23:09:50

标签: django database caching

我正在开发一个Django应用程序,其左侧面板类似于Slack's。它显示当前用户订阅的频道。由于每个页面都显示此面板,因此我将其放在基本模板中。我的问题是,因为面板内容是动态的,所以每次加载页面时,它都会创建数据库访问(获取用户的频道列表)。

优化它的最佳方法是什么?我是否应该缓存左侧面板的内容并在其发生变化时使其无效(如果用户订阅了新频道或离开了频道)?还有其他选择吗?

1 个答案:

答案 0 :(得分:1)

如果您正在谈论单个HTML页面并且不想重新设计网站以使用带有Web服务调用的前端JavaScript框架,则缓存可以节省许多数据库调用。虽然我推荐memcached或类似的东西,但数据库缓存是最容易设置的。将其添加到设置:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
        'LOCATION': 'django_db_cache',
    }
}

然后运行此命令以创建数据库缓存:

django-admin createcachetable

将模板的部分包裹起来是这样的:

{% cache 3600 "leftnav-" request.user.get_username %}
.......
{% endcache %}

这将使用键" leftnav-username"为下一个小时创建一个缓存条目。 - 当用户添加或删除项目时,您必须从缓存中删除它。

您可能还希望在完成后在开发环境中使用虚拟缓存。这基本上会关闭开发中的缓存:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
    }
}
祝你好运!