Django 缓存性能

标签 django memcached redis

我们现在使用 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/

相关文章:

c# - Redis超时异常

python - 关于接受 zip 文件进行处理的守护进程的建议

python - 在 Django 上创建临时 zip 文件并在返回后将其删除

php - 缓存分页结果,清除更新 - 如何解决?

mysql - NodeJS、Redis 和 MySQL

java - memcache 数据过期时是否删除 key ?

django - 我需要在 Django 的整体布局和标题上使用 'load static' 两次吗?

python - Django 1.8,Postgis查询两点之间的距离

.net - 带有 SortedSet 的 ServiceStack Redis 异常

python - mongodb 或 redis 用于类似 facebook 的网站?