gpt4 book ai didi

Django - 多站点站点缓存

转载 作者:行者123 更新时间:2023-12-02 01:15:50 25 4
gpt4 key购买 nike

我在一个 Django 应用程序下有多个站点,我想在这些站点上实现站点范围的缓存。然而事实证明这是一个真正的麻烦。

发生的情况是 settings.CACHE_MIDDLEWARE_KEY_PREFIX 在启动时设置一次,我无法继续根据当前站点进行更改。因此,如果缓存 http://website1.com/abc/ 的页面,则 http://website2.com/abc/ 会呈现以下内容的缓存版本http://website1.com/abc/。这两个网站都在同一个 Django 实例上运行,因为 Django Sites 似乎允许我们这样做。

这是一个不正确的方法吗?因为我无法在运行时动态设置 CACHE_MIDDLEWARE_KEY_PREFIX ,所以无法使用 Django 的站点范围缓存来缓存多个站点。我也无法对模板和 View 缓存执行此操作。

我的印象是,真正需要设置的方式是每个站点都需要自己的 Django 实例,除了设置文件之外,该实例几乎相同,在我的情况下,设置文件仅因 的值而有所不同CACHE_MIDDLEWARE_KEY_PREFIX。这些 Django 实例都读取和写入同一个数据库。这让我担心,因为它可能会产生许多新问题。

我是否走在正确的道路上,或者我是否错误地理解了多站点架构需要如何工作?我检查了 Django 文档,并没有真正提到如何处理服务多个站点的 Django 应用程序的缓存(这不是低级缓存)。

最佳答案

(免责声明:以下内容纯属猜测,未经测试。食用时要放少许盐。)

也许可以使用 vary_on_headers View 装饰器在缓存键中包含 'Host' header 。这应该会导致缓存键包含 HTTP 主机 header ,从而有效地隔离站点的缓存。

@vary_on_headers('Host')
def my_view(request):
# ....

当然,这只适用于每个 View ,并且必须向所有 View 添加装饰器可能会很麻烦。

深入研究source of @vary_on_headers揭示 patch_vary_headers() 的使用它可以在中间件中使用,以在站点级别应用相同的行为。大致如下:

from django.utils.cache import patch_vary_headers

class VaryByHostMiddleware(object):
def process_response(self, request, response):
patch_vary_headers(response, ('Host',))
return response

关于Django - 多站点站点缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4859003/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com