gpt4 book ai didi

python - 用于 Web 应用程序的 Django 缓存

转载 作者:太空宇宙 更新时间:2023-11-03 11:57:12 25 4
gpt4 key购买 nike

我的问题是关于在 Django 中缓存数据库更新的最佳实践。

我正在编写一个票务系统。我有一个 Ticket 模型和一个 Update 模型。每次用户向工单添加更新时,都会创建一个更新并将其作为外键链接到工单。

我有一个 TicketDetail View ,它显示了工单描述和相关的更新。用户可以从此 View 添加更新。我已经使用 memcached 启用了站点范围的缓存。

如果用户添加更新然后重新加载此 View ,他们将有一段时间看不到更新。我明白为什么,因为我需要启用每个 View 的缓存,并为此 View 将其关闭。

但是为了享受缓存的全部速度,我真正希望能够为该 View 启用缓存,但在用户进行更新后立即使缓存失效。

有没有简单的方法来做到这一点?非常感谢!

最佳答案

由于竞争,使用 memcached 使陈旧数据失效/更新时存在一些问题 conditions , 哪一个主要Johnny Cache后端依赖。在您的特定情况下,假设您总共有 10 个更新,然后两个不同的用户在两个不同的进程中创建了一个工单更新。很可能您最终只显示了 11 个更新,即使总共有 12 个更新:其中一个将以严重的WTF?

告终

如果 memcached 是您的商店,这就是您在使用任何模型/查询集失效解决方案时都会遇到的问题。您没有加入来自多个不同表的大量行,因此不应将其视为昂贵的查询——您可能只依赖于数据库。

但不了解你所做工作的全部范围,我建议这样的事情是不合适的。不过,我建议您看看使用 mongoDB 的可能性。 , Tokyo CabinetRedis作为 memcached 的缓存替代品,在您需要对更新关键用户数据进行细粒度控制的情况下。

您可以做的另一件事是让更新此类数据的所有请求都通过在单个进程中专门运行的应用程序实例进行路由。这将完全缓解 memcached 上的任何更新争用,并且对于读取性能大大优于写入的应用程序是可行的,尽管我可以看到这如何很快成为开发人员的维护噩梦。

关于python - 用于 Web 应用程序的 Django 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5071365/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com