2009-12-20 5 views
2

내 웹 사이트에서 nginx 및 redis를 사용하고 있습니다. 내 사이트의 여러 항목에 대해 URL에 추적 매개 변수를 추가하여 사용자가 항목을 클릭하면 요청한 콘텐츠 사용자에게 서비스를 제공하지 않고 사용자 사용 통계를 수집 할 수 있습니다. 백그라운드 응용 프로그램을 치지 않고 nginx에서 redis로이 통계를 캡처하는 방법에 대한 방법을 찾고 있습니다.nginx/redis 및 URL의 추적 매개 변수 처리

예를 들어 내 페이지에 여러 행의 표가 있고 각 표에 행/열 형식의 항목이 있다고 가정합니다. 따라서 실제 URL이 www.mysite.com/news/dodi이면 {table : 2, row : 1, column : 3}의 항목에 대해 URL을 삽입하고 싶습니다. www.mysite.com/news/dodi/day = 29? table = 2 & row = 1 & column = 3. 사용자가 클릭하면 nginx가 콘텐츠를 가져오고 적절한 통계를 업데이트하기 위해 redis를 클릭합니다 (여기에 증분 일 수있는 29 일, 표 2, ...).

내가 백그라운드 앱을 치지 않고 이것을 달성하는 방법에 대한 제안은 무엇입니까?

답변

3

추적 매개 변수의 경우이 유형의 작업을 사용자 요청의 범위 밖에 두십시오. 통계 추적을 위해 대기 시간 벌칙을 지불하지 않도록하십시오. Cron은 access.log에서 매개 변수를 추출하고 redis 및/또는 database를 업데이트하는 스크립트입니다.

캐싱 내용면에서 최근 출시 된 nginx redis 모듈이 memcached 모듈과 거의 같은 방식으로 작동합니다. GET과 SELECT 만 현재 구현됩니다. 응용 프로그램이 캐시를 채우고 있다고 가정합니다.

http://wiki.nginx.org/Nginx3rdPartyModules#HTTP_Redis_Module

샘플 nginx.conf : 크론 스크립트와 Nginx에의 레디 스 모듈에 대한

http 
{ 
... 
     server { 
      location/{ 
       set $redis_db "0"; 
       set $redis_key "$uri?$args"; 
       redis_pass  127.0.0.1:6379; 
       error_page  404 502 504 = @fallback; 
      } 

      location @fallback { 
       proxy_pass  backed; 
      } 
     } 
} 
+0

좋은 점. 몇 가지 질문 : [1] NginxRedis 모듈에 SET/INCR을 추가하는 것이 얼마나 어렵습니까? [2] 위의 예와 같이 콘텐츠는 redis에서 가져옵니다. 이 쿼리는 redis를 쿼리하기 때문에 몇 가지 redis 키를 증가시키기 위해 추가 된 작업이 추가 될 수 있습니까? 이 작업을 수행 할 수있는 방법이 있습니까? redis가 빠르면이 추가 작업에 대한 사용자의 페널티는 마이크로 초 단위가 될 것이므로 사용자에게 지각 할 수있는 대기 시간 오버 헤드가 없습니다. – Ethan

+0

전체 모듈은 ~ 600 줄의 코드입니다. 그래서 추가 명령을 추가하는 것은 큰 문제가되지 않습니다. 즉, 나는 nginx 모듈을 작성한 적이 없다고 말했다. –

+0

감사합니다. Ryan. 위 쿼리 # 2에 대해 설명해 줄 수 있습니까? – Ethan