Django 缓存:在基本服务器资源上长时间缓存数千个查询

Django Cache: Caching thousands of queries for a long time, on basic server resources

我正在构建一个网站,在我的脑海中,每天有数百个(我希望是数千个!)'get' 个查询将在文件系统中缓存几个月。

阅读 the cache documentation,但是,我发现默认值倾向于小而快的缓存周期。

一个 old post 描述了一种策略,就像我想象的那样,破坏了他们的服务器。

当然,the current django code 自 2012 年以来似乎有所发展。但是缓存默认值仍然保持不变...

不知我的方向是否正确。

我对缓存的熟悉程度仅限于享受 W3 Total Cache 在相关目录中保存了数千个文件后除了基本设置之外什么都不懂的结果。

经验丰富的开发人员如何处理 "stage 1" 此任务:

没有预算支持基于 Redis 的解决方案(例如) (Not a valid argument)

您如何在相当基本的服务器资源上 运行 长时间缓存通常增加的查询数量 - 能够形成批量 - 运行?

Django 的缓存后端 * 应该与实现无关。例如,如果你想从文件系统缓存或 redis 缓存或 memcache 开始,它对 django 来说并不重要。

我能想到你的方法有几个问题:

  • 您的数据集增长速度有多快?如果您的数据集大小相当稳定,那么缓存条目是否长期存在并不重要。
  • 您将如何使您的查询无效?如果查询被缓存了几个月,这表明数据没有改变;缓存失效是一个需要考虑的大问题,客户端不应该看到陈旧的数据。
  • 您正在使用文件系统缓存吗?如果每个服务器都缓存数据,请求是否会不断分配给相同的服务器?如果不是,那么多个服务器可以有重复的缓存,这是使用集中式缓存的好处之一 (redis/memcache)
  • 您应该能够根据您当前的数据集大小、您想要缓存的数据量以及您需要的缓存大小的数据增长率来计算出一个很好的估计值。我觉得共享缓存会走得很远,可以在 "basic server" 资源上 运行。

对于第 1 阶段,我会:

  • 选择共享缓存,redis 或 memcached,当您开始扩展到多服务器设置时,这应该会轻松很多
  • 估计您需要缓存多少数据,以及您预测什么样的数据大小增长,以确保您的缓存大小合适。
  • 我觉得缓存失效通常不是关于数据应在缓存中保留多长时间的既定策略,它取决于数据更改的时间,这应该强制使缓存失效,以便客户端看不到陈旧数据