2012-12-30 3 views
3

나는 다음과 같은 스택을 사용하고 그것을 최저치를 대신 값을 추가합니다 redis를 주 데이터베이스로 사용하는 작은 응용 프로그램을 만듭니다. 내 코드에서는 GET, SET, EXISTS 및 EXPIRE 만 사용합니다.은, 레디 스는

터미널에서 앱을 사용하면 모든 것이 정상적으로 작동합니다. 모든 요청에 ​​대해 콘텐츠가 사용 가능한지 (EXISTS) 검사합니다. 그렇지 않으면 콘텐츠가 잠시 동안로드되고 저장됩니다 (SET, EXPIRE). 그 후에, 내용은 사용자에게 선물된다 (GET).

문제는 nginx/uwsgi를 통해 앱을 실행하자마자 얼마 동안은 EXPIRE가 무시 된 것 같습니다. 값을 삭제하고 새로로드하는 대신 새 콘텐츠가 이전 콘텐츠에 추가됩니다. 이는 한 번뿐만 아니라 수십 번처럼 보이기 때문에 매우 큰 값과 때로는 시간 초과가 발생합니다.

나를 위해 가장 이상한 점 : uwsgi를 다시 시작하자마자 모든 문제가 사라집니다.
아이디어가 있으십니까?

+0

아마도 어떤 종류의 경쟁 상태가 발생 했습니까? 'SET'과'EXPIRE' 대신에'SETEX'를 사용하고'EXISTS'와'SETEX'을'MULTI'와'EXEC'로 묶어서 같은 트랜잭션에있게 할 것입니다. –

+1

문제를 나타내는 코드는 어떻습니까? – Marcin

+0

@Marcin : 죄송합니다. repo에 대한 링크를 추가하는 것을 잊어 버렸습니다. https://github.com/saibotd/hackerhub/blob/master/app.py – saibotd

답변

0

나는 그것을 알아 냈다! > 라인 22, 23

내가 모든 요청에 ​​이러한 개체를 다시 만들 필요가 예상대로 작동 -

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

http://github.com/saibotd/hackerhub/blob/master/app.py을 : 문제는 내가 "재활용"이 두 인스턴스이었다.

관련 문제