我们现在使用 Redis 作为 Django 应用程序的内存缓存(我们之前使用过 memcached,性能上没有太大差异,我们使用 Redis 是因为磁盘转储功能)。
问题是,在我看来,Django 缓存的性能很糟糕。我们有 View ,有 102 次缓存命中(无未命中)并且需要 81 毫秒(仅缓存部分,使用 Django 调试工具栏测量)。在我看来 - 这是大量的时间。我知道,对数据库进行查询会花费 10 倍以上的时间(甚至 100 倍),但即便如此,缓存性能也不是很好。
我们在不同的主机上运行 Redis(和之前的 memcached),在本地网络中与其他服务器连接。
有什么方法可以调整 Django 中的缓存性能吗?
最佳答案
问题很可能是每个页面需要检索的项目数量,而不是缓存本身的性能。 102 次缓存调用意味着网络延迟会浪费大量时间。通过完全控制代码,您可能可以通过多线程或流水线来解决这个问题,但在这种情况下,您没有这种选择——使用框架意味着以在边缘情况下降低性能为代价获得更简单的代码。
最简单的解决方法可能是将 redis 缓存移动到网络服务器上——本地请求要快得多。这会使缓存无效变得复杂,但您可以通过复制来解决这个问题——要么将所有写入主节点并从本地从属节点读取,以便所有节点都具有相同的缓存,要么在本地写入主节点用于复制当您需要使一个对象无效时,对所有从站执行 del 命令。
另一件要看的事情是性能是否确实是一个问题。就单个用户的体验而言,300 毫秒加载一个页面并不算太糟糕。这只是一个问题,如果这意味着您不能在所有用户中每秒处理超过 3 个页面 - 在这种情况下不太可能,因为瓶颈是网络延迟而不是 CPU 或本地 I/O。
关于Django 缓存性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7276176/