2

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

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

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

4

1 回答 1

0

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

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

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

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

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

希望这对编码有所帮助和快乐!

于 2013-09-06T20:42:35.443 回答