【发布时间】:2011-11-08 17:21:45
【问题描述】:
我们现在使用 Redis 作为 Django 应用程序的内存缓存(我们之前使用过 memcached,性能没有太大差异,我们使用 Redis 是因为磁盘转储功能)。
在我看来,问题是 Django 缓存的性能非常糟糕。我们有视图,有 102 次缓存命中(没有未命中),它需要 81 毫秒(只是缓存部分,使用 Django 调试工具栏测量)。在我看来 - 这是大量的时间。我知道,对 DB 进行查询会花费 10 倍以上(甚至 100 倍)的时间,但即便如此,缓存性能也不好。
我们在不同的主机上运行 Redis(和之前的 memcached),与其他服务器连接在本地网络中。
有没有办法在 Django 中调整缓存性能?
【问题讨论】:
-
这 81 毫秒是从缓存中取出内容所花费的全部时间,还是包括其他内容?你在缓存什么? HTML 片段,还是您在挑选复杂的对象或模型实例?
-
如果 81 毫秒是完整的请求,直到您在远程主机上收到响应,那么这个时间实际上是相当不错的。 :)
-
81 毫秒是仅获取缓存内容所需的时间。完整请求(缓存、不可缓存 SQL、模板解析等)大约需要 250-300 毫秒。我们正在缓存不同的东西,从小块文本(大部分)到更大的 HTML 块。
-
如果你提前知道你从缓存中得到了什么,redis 将允许你一次获取所有缓存的项目。如果您草率地编码您的网站并使用模板内缓存标签作为拐杖,那么您的性能将永远不会超级好。请记住,对于每次缓存查找,您都需要进行一次网络往返并阻塞,直到命中返回。而你这样做了 102 次......