【问题标题】:How to implement per-request in-memory "cache" of value in django如何在 django 中实现每个请求的内存“缓存”值
【发布时间】:2013-03-12 15:48:55
【问题描述】:

我想从数据库中存储一个值,该值在请求/响应周期内不会更改,但会被使用数百次(可能是数千次)。

例如:

#somefile.py

def get_current_foo(request): # this gets called a lot and is currently a bottleneck
  foo = get_foo_from_db(request.blah)
  return foo

目前我使用 memcached 来存储值,但是这个东西被调用得足够多,即使使用 memcached 来存储值也是一个瓶颈(我正在分析它)。有没有办法“缓存”当前请求/响应周期的内存值?

(从Are python "global" (module) variables thread local?跟进)

【问题讨论】:

标签: python django


【解决方案1】:

如果是按请求数据,则将其存储在请求对象本身上。 :-)

请参阅 Per-request cache in Django? 了解一些这样做的技巧。

【讨论】:

  • 该链接似乎解决了在 threadlocals 中缓存请求本身的问题,这解决了另一个问题(到处传递请求)。由于我已经有请求,看来我可以将属性添加到它,并在以后的调用中检查它,很简单,如果我理解正确的话。
  • @BenRoberts:第二个答案直接在 Django 请求中存储东西;我不是 100% 确定你可以简单地做 request.my_cache = cachedvalue 然后用 getattr(request, 'my_cache', None) 测试它。
  • 啊。知道了。我会先尝试基本的方法,如果不起作用,我会沿着那条路走。
  • 只需设置属性 (request.myvalue) 并使用 getattr(request, 'myvalue', None) 似乎工作正常。
猜你喜欢
  • 1970-01-01
  • 2010-10-17
  • 2010-12-29
  • 2011-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-31
  • 1970-01-01
相关资源
最近更新 更多