Django中API调用的后端缓存结果

时间:2013-06-22 17:40:53

标签: django rest caching

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

  • 结果是长寿的,可能只需要每6个月或更长时间无效
  • 结果是json
  • 来自这些缓存结果的数据可用于添加新的应用功能并在以后扩展Django模型

鉴于这套要求(尤其是最后一项要求),您认为最佳选择是什么?当我第一次进行搜索时,我还在考虑实施Celery来完成API调用。

1 个答案:

答案 0 :(得分:0)

正如您提到的那样,结果很长,所以为什么不在第一次将结果保存到包含JSON的文本文件时将结果保存到磁盘?

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

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

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

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

希望这有助于编码!