2011-01-27 41 views
0

現在,我正在從API中檢索信息,並且我想要緩存我回來的信息,所以我不必經常打他們的服務器並使用我的最大API調用請求。現在,用戶可以搜索特定的關鍵字,比如「葡萄」,我想通過調用「cache.set(search_result,info_retrieved,600)」緩存檢索到的字符串,其中「search_result」是用戶的搜索結果,在這種情況下,「葡萄」。我希望關鍵是用戶的搜索結果,即「葡萄」。我不能這樣做,因爲緩存要求密鑰是一個字符串。我怎樣才能解決這個問題?我無法使用數據庫,因爲信息更新太頻繁。Django緩存 - 如何生成自定義鍵名稱?

我可以使用數據庫,但我會寫信息給它,然後在幾分鐘後刪除它,這似乎不切實際。所以,我只是想暫時緩存它。

+2

通過_「`search_result`,在這種情況下,葡萄」_,你的意思是`search_key`嗎?諸如「葡萄」之類的關鍵字已經是一個字符串,所以使用它作爲緩存鍵不應該有任何問題。如果您還將緩存用於其他內容,則可以向其添加前綴以防止衝突。 – 2011-01-27 09:33:53

回答

3

正如Shawn Chin所提到的,你應該已經有了一個搜索查詢的字符串「版本」,這可以很好地用作緩存鍵。

memcached的一個限制(不知道其他後端)是某些字符(特別是空格)不允許在鍵中使用。要解決這個問題,最簡單的辦法就是散列的字符串鍵添加到一個十六進制消化並使用它作爲一個重點:

from hashlib import sha1 
key = sha1('grapes').hexdigest() # '35c4cdb50a9a6b4475da4a66d955ef2a9e1acc39' 

如果你可能有不同的用戶不同的結果(或根據任何標準),就可以標籤/鹽/味與該信息的字符串表示的關鍵:

from hashlib import sha1 
key = sha1('%s:%s:%s' % (user.id, session.sessionid, 'grapes')).hexdigest() 

您也可以使用django-newcache

Newcache是​​Django改進的memcached緩存後端。它提供了超過Django內置高速緩存後端的四大優勢:

  • 它支持pylibmc。
  • 它允許在每個密鑰發送到memcached之前運行一個函數。
  • 它支持無限超時設置緩存鍵。
  • 它減輕了雷鳴的牛羣問題。

它也有一些相當不錯的默認值。默認情況下,每個密鑰上運行的函數都是哈希,版本和調用密鑰的函數。稍後更多。