【问题标题】:Django Cache: Caching thousands of queries for a long time, on basic server resourcesDjango Cache:在基本服务器资源上长时间缓存数千个查询
【发布时间】:2016-06-11 03:58:46
【问题描述】:

我正在构建一个网站,我认为每天有数百个(我希望有数千个!)“获取”查询将在文件系统中缓存几个月。

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

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

当然,the current django code 似乎从 2012 年开始发展。但是缓存默认值仍然保持不变...

我想知道我是否走在正确的轨道上。

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

经验丰富的开发人员如何处理此任务的“第 1 阶段”:

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

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

【问题讨论】:

    标签: python django caching django-cache


    【解决方案1】:

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

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

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

    对于第 1 阶段,我会:

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

    【讨论】:

    • 我看到了大局。我会留下来享受“阶段 0”,尝试获得一些基准,然后在您的方法的背景下根据需要考虑一个健全且基础良好的“阶段 1”。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 2015-05-18
    • 1970-01-01
    • 2014-02-13
    • 2014-12-10
    • 1970-01-01
    • 2017-09-12
    相关资源
    最近更新 更多