2012-12-30 34 views
3

我使用以下堆棧:當uwsgi使用Redis的附加價值,而不是它塞汀

  • nginx的
  • uwsgi
  • 的Python(瓶)

我給自己定啓動一個使用redis作爲主要數據庫的小應用程序。我只在代碼中使用GET,SET,EXISTS和EXPIRE。

在終端中嘗試應用程序時,一切正常。在每個請求上,它檢查內容是否可用(EXISTS)。如果不是內容被加載並保存一段時間(SET,EXPIRE)。之後,內容呈現給用戶(GET)。

問題是,只要我通過nginx/uwsgi運行應用程序,一段時間後EXPIRE似乎被忽略。新的內容不再是刪除值並加載新的內容,而是附加到舊的內容 - 因爲它似乎不僅僅是一次,而是像幾十次一樣,導致非常大的值,有時會超時。

對我來說最奇怪的是:一旦我重新啓動uwsgi,整個問題就會消失。
任何想法?

+0

也許你正在經歷某種競爭條件?嘗試使用'SETEX'而不是'SET'和'EXPIRE',並用'MULTI'和'EXEC'將EXISTS和SETEX括起來,這樣它們就會處於同一個事務中。 –

+1

有些代碼證明了這個問題呢? – Marcin

+0

@Marcin:對不起,忘了添加一個鏈接到回購:https://github.com/saibotd/hackerhub/blob/master/app.py – saibotd

回答

0

我已經想通了!問題是,我「回收」這兩個實例:

md = markdown.Markdown(safe_mode="escape", output_format='html4') 
h2t = html2text.HTML2Text() 

http://github.com/saibotd/hackerhub/blob/master/app.py - >線22,23

我需要重新創建這些對象的每個請求,並將其按預期工作。