2013-03-12 92 views
1

我想存儲一個價值從數據庫中不會改變在請求/響應週期,但獲得使用數百(可能數千)次。如何實現每個請求在內存中的「緩存」的價值在Django

例如爲:

#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?跟進)

+2

您可以將它存儲在請求對象本身嗎? – 2013-03-12 15:51:20

+0

我想不出爲什麼。謝謝! – 2013-03-12 15:52:11

+0

[每個請求緩存在Django?]可能的重複?(http://stackoverflow.com/questions/3151469/per-request-cache-in-django) – Djizeus 2016-02-07 09:09:23

回答

3

如果是每個請求的數據,將其存儲在請求對象本身。 :-)

有些技術可以參見Per-request cache in Django?

+0

該鏈接似乎解決緩存請求本身在threadlocals,這解決了不同的問題(無處不在)。因爲我已經有了這個請求,所以我可以直接添加這個屬性,並且在將來的調用中檢查它,很簡單,如果我理解正確的話。 – 2013-03-12 16:01:37

+0

@BenRoberts:第二個答案將東西直接存儲在Django請求中;我不是100%確定你可以簡單地執行'request.my_cache = cachedvalue',然後用'getattr(request,'my_cache',None)'測試它。 – 2013-03-12 16:03:13

+0

啊。得到它了。我會先嚐試一下基本的方法,如果不行的話,我會沿着這條路線走。 – 2013-03-12 16:08:08