【问题标题】:Which backend for caching results from API calls in Django哪个后端用于缓存 Django 中 API 调用的结果
【发布时间】:2013-06-22 17:40:52
【问题描述】:

我有一个 Django 项目,用户可以在其中执行搜索,然后调用数百个 REST API 来生成结果。这可能需要 3-10 秒。我想实现一个缓存来存储结果,以提高性能并管理 API 的配额。一些关键要求:

  • 结果是长期有效的,可能只需要每 6 个月或更长时间失效一次
  • 结果为 json 格式
  • 这些缓存结果中的数据可用于添加新的应用功能并在以后扩展 Django 模型

鉴于这组要求(尤其是最后一个),您认为最佳选择是什么?当第一次进行搜索时,我还在考虑实现 Celery 以分配 API 调用。

【问题讨论】:

  • 请分享你到目前为止所做的事情。
  • 不确定您还希望我分享什么,但目前没有缓存 - 每次搜索都会进行数百次 API 调用。
  • 你考虑过哪些缓存后端?
  • 这个问题太笼统了。你在这里有很多选择。我也看不出 Celery 如何帮助缓存!一些有用的东西:jeffknupp.com/blog/2012/02/24/… 然后查看 Memcached。如果你有问题,请重新发布。
  • @TimmyO'Mahony 我认为磁盘上的某些东西最适合这些要求。到目前为止,我已经研究过 Django 的内置数据库或文件系统缓存,或者可能是 MongoDB。

标签: django rest caching


【解决方案1】:

正如您所提到的,结果是长期存在的,那么为什么不将结果作为包含 JSON 的文本文件在第一次生成后保存到磁盘呢?

我在一些 API 调用提取大量数据时遇到了类似的问题。这就是我解决问题的方法:

  • 散列查询字符串 (search=noodles => 838f8d9a[..]a370bbfa6df46b171c02f0c)
  • 搜索具有相同哈希的文件(838f8d9a[..]a370bbfa6df46b171c02f0c.txt
    • 如果文件存在:
    • 如果文件不存在:
      • 生成内容(就像您现在所做的那样)并将内容保存在一个文件中(将查询的哈希值作为文件名用于将来的请求)
      • 在响应中发送内容

不过有一个小缺点:我通过 Django 提供内容,因为我正在检查一些用户权限。但您也可以返回静态内容 url!

这是一个简单的解决方案,也很容易实现。至于您的最后一个要求,您可以跟踪每个哈希的命中,以查看最频繁的请求并从那里继续。

希望这有助于编码愉快!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-15
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 2016-11-13
    • 2016-09-24
    • 2012-12-11
    相关资源
    最近更新 更多