gpt4 book ai didi

django - 实用(Django)缓存策略和实现?缓存长,数据更改时缓存无效

转载 作者:行者123 更新时间:2023-12-04 10:56:28 30 4
gpt4 key购买 nike

我有一个 Django 应用程序,可以获取近乎实时的数据(推文和投票),尽管更新平均每分钟或两分钟发生一次。但是,我们希望通过在数据出现时立即更新站点和 api 结果来显示数据。

我们可能会在这个站点上看到大量的负载,所以我最初的想法当然是缓存!

让某种 Memcached 缓存被另一个进程或事件手动失效是否可行?换句话说,我会缓存 View 很长时间,然后有新的推文和投票使整个 View 无效。

  • 也许适度的性能增强证明增加的复杂性是合理的?
  • 是否有我可以创建的实际实现(我与其他开发人员一起工作,因此在每个响应调用周围破解大量内容并不是一个好的选择)?

  • 我不担心仅使某些对象无效,并且我考虑将 MemcachedCache 子类化后端在 this strategy 之后添加一些功能.但当然,Django 的 session 也使用 Memcached 作为直写缓存,我不想让它无效。

    最佳答案

    缓存失效可能是处理您正在尝试做的事情的最佳方式。根据您问题的措辞,我将假设您的应用程序如下:

  • 您有某种 API 可以接收新的信息更新而不是进行轮询。 EG:每隔一两分钟,您就会收到一个 API 请求,并在您的数据库中存储一些信息。
  • 您已经在使用 Memcached 来缓存内容以供阅读。可能通过 cronjob 或类似的过程定期扫描您的数据库并更新您的缓存。

  • 假设以上两件事都是真的,缓存失效肯定是要走的路。这是在 Django 中执行此操作的最佳方法:
  • 一个新的 API 请求进入您的服务器,其中包含要存储的新数据。您将其保存在数据库中,并使用 post save signal在您的模型类(EG:Tweet、Poll 等)上更新您的 memcached 数据。
  • 用户访问您的网站并请求阅读他们最近的推文、民意调查或其他内容。
  • 您从 memcached 中提取推文、投票等数据,并将其显示给他们。

  • 这基本上就是 Django signals是为了。它们将在您的对象被保存/更新后自动运行,这是使用最新信息更新您的缓存存储的好时机。

    这样做意味着您永远不需要运行后台作业来定期扫描您的数据库并更新您的缓存——您的缓存将始终与最新数据即时保持同步。

    关于django - 实用(Django)缓存策略和实现?缓存长,数据更改时缓存无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7522180/

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