Python 动态创建文件的缓存系统?

Python 动态创建文件的缓存系统?,python,Python,我有一个web服务器,它以多种格式(pdf和doc文件)动态创建各种报告。这些文件需要相当多的CPU才能生成,而且两个人使用相同的输入创建相同的报告的情况非常常见 投入: 以字符串形式输入的原始数据(方程式、数字和 单词列表),任意长度,几乎99%将少于200个单词左右 报表创建工具的版本 当用户试图生成报告时,我想检查是否已经存在具有给定输入的文件,如果已经存在,则返回指向该文件的链接。如果文件不存在,那么我想根据需要生成它 现在已经有了什么解决方案?我以前缓存过简单的http请求,但密钥

我有一个web服务器,它以多种格式(pdf和doc文件)动态创建各种报告。这些文件需要相当多的CPU才能生成,而且两个人使用相同的输入创建相同的报告的情况非常常见

投入:

  • 以字符串形式输入的原始数据(方程式、数字和 单词列表),任意长度,几乎99%将少于200个单词左右
  • 报表创建工具的版本
当用户试图生成报告时,我想检查是否已经存在具有给定输入的文件,如果已经存在,则返回指向该文件的链接。如果文件不存在,那么我想根据需要生成它

  • 现在已经有了什么解决方案?我以前缓存过简单的http请求,但密钥非常简单(通常是数据库id)

  • 如果我必须自己做这件事,最好的办法是什么。输入可以是几百个字,我想知道如何将字符串转换为发送到缓存的键

    //整个输入,使用太多内存,一对一映射 高速缓存[一个234567891011……] //短键 缓存['1-2']=>5个结果,然后我必须进一步缩小这些结果的范围

  • 这是应该在数据库中完成的事情,还是在web应用程序代码(在我的例子中是python)中完成更好


  • 谢谢大家。

    这就是Apache的用途

    创建一个包含报告的目录

    将Apache配置为服务于该目录中的文件

    如果报告存在,则重定向到Apache将提供服务的URL

    否则,报告不存在,所以创建它。然后重定向到Apache将提供的URL


    没有“散列”。您有一个键(“一个字符串(方程式、数字和单词列表),任意长度,几乎99%将小于200个单词”)和一个值,这是一个文件。不要把时间浪费在杂烩上。你只有一把长钥匙

    你可以用一个“slug”来压缩这个键:去掉标点符号,用u替换空格,诸如此类的东西

    您应该创建一个内部代理键,它是一个简单的整数


    您只需将一个长键转换为一个“报告”,该报告要么作为文件存在,要么将作为文件创建

    通常的做法是使用反向代理,例如或

    您使用的是哪种web框架?有些框架内置了缓存功能。但是,您建议如何将输入字符串映射到文件?哈希对于小的字符串会有太多的冲突,不是吗?“比尔,考虑使用Sh256或哈希的任何东西,计算出损坏的成本/ $$乘以碰撞的可能性。如果生成的数字不够小,请使用更大的散列。重复冲洗。有时候你根本无法忍受散列冲突——比如医疗数据之类的。在这种情况下,永远不要依赖于一个有