如何在Django请求之间保留共享数据结构在内存中

ldi*_*inh 6 python django caching

我的Django应用程序对性能非常敏感,所有请求都需要访问相同的数据结构.如何以可以访问所有请求的方式存储数据结构?

背景:

我目前正在使用缓存后端.这有点慢,因为DS很大,每次都必须检索和取消.

我知道HTTP交互应该是无状态的,并且明知需要打破这种约束.没有什么不好的事情应该发生,因为它是只读的吗?

Sea*_*ira 5

有几种方法可以处理这个问题:

  1. 将数据结构完全移出Python(而不是每次都从存储介质加载)。例如,如果您的结构有利于它,您可以将其存储在RedisMongoDBRiakNeo4j中。(作为奖励,您可以获得查询数据的能力,如果您需要这种能力)。
  2. 将结构移至单独的进程并使用管道或队列与其通信。
  3. 使用内存映射文件来共享数据。

HTTP 是无状态的,但这并不意味着您不能在请求之间保留状态。您只需自己完成这项工作(在应用程序级别)。该协议不会为你做这件事。 理想情况下,您可以避免这种状态,因为它更容易水平扩展,但并非每个应用程序都易于扩展