• 第十五章: 缓存机制

    第十五章: 缓存机制

    动态网站的问题就在于它是动态的。 也就是说每次用户访问一个页面,服务器要执行数据库查询,启动模板,执行业务逻辑以及最终生成一个你所看到的网页,这一切都是动态即时生成的。 从处理器资源的角度来看,这是比较昂贵的。

    对于大多数网络应用来说,过载并不是大问题。 因为大多数网络应用并不是washingtonpost.com或Slashdot;它们通常是很小很简单,或者是中等规模的站点,只有很少的流量。 但是对于中等至大规模流量的站点来说,尽可能地解决过载问题是非常必要的。

    这就需要用到缓存了。

    缓存的目的是为了避免重复计算,特别是对一些比较耗时间、资源的计算。 下面的伪代码演示了如何对动态页面的结果进行缓存。

    1. given a URL, try finding that page in the cache
    2. if the page is in the cache:
    3. return the cached page
    4. else:
    5. generate the page
    6. save the generated page in the cache (for next time)
    7. return the generated page

    为此,Django提供了一个稳定的缓存系统让你缓存动态页面的结果,这样在接下来有相同的请求就可以直接使用缓存中的数据,避免不必要的重复计算。 另外Django还提供了不同粒度数据的缓存,例如: 你可以缓存整个页面,也可以缓存某个部分,甚至缓存整个网站。

    Django也和”上游”缓存工作的很好,例如Squid(http://www.squid-cache.org)和基于浏览器的缓存。和基于浏览器的缓存。) 这些类型的缓存你不直接控制,但是你可以提供关于你的站点哪部分应该被缓存和怎样缓存的线索(通过HTTP头部)给它们

    • 设定缓存
    • 站点级 Cache
    • 视图级缓存
    • 模板碎片缓存
    • 低层次缓存API
    • 上游缓存
    • 使用 Vary头部
    • 控制缓存: 使用其它头部
    • 其他优化
    • MIDDLEWARE_CLASSES 的顺序
    • 下一章