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

标签 django caching memcached

我有一个 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/

    相关文章:

    python - 如何使用创建文件的文档的 S3 URL 将文档(pdf/图像)附加到 Django 电子邮件程序?

    python - 使用django模板,如何删除循环中最后一项换行符

    performance - 如何检查应用程序是否受 CPU 限制或内存限制?

    javascript - 我的所有模板都在 $templateCache 中,但 Angular 仍然在发出请求

    php - Memcache 使用 php 进行优化

    linux - Linux 系统上的内存使用

    python - TypeError at/products/object of type 'ModelBase' 没有 len()

    django - Django 的 render_to_response 是否缓存未渲染的模板或每次都从磁盘加载?

    caching - @Service 类中的 Spring Boot 缓存不起作用

    symfony - 将 Memcached 服务添加到 symfony2