2013-11-03 4 views
1

나는 여러 웹 사이트의 페이지 뷰를 계산하는 플라스크 응용 프로그램을 작성 중입니다. Redis와 Redispy를 사용하기로 결정했지만 구조화 방법을 결정하는 데 어려움을 겪고 있습니다. 원래 나는 날짜별로, 또는 사이트 이름으로 조회하고 카운트 값을 표시 할 수 있도록하려면이Redis 페이지 카운터

redis.set("date:YYYYMMDD:site:sitename", 1) 

같은 뭔가를하려고 노력했다. 나는 .keys를 날짜 또는 사이트 이름으로 쿼리하려고했지만 REDIS 문서는 키 사용을 피한다고 말합니다.

redis.hset("date:YYYYMMDD", "site", "sitename") 
redis.hset("counter", 1) 

가 궁극적으로 내가 날짜를 기준으로 사이트 이름으로 사이트 카운터에 수 실행 보고서, 또는 모든 기간에서 모든 값을 표시하려면 :
그래서 나는 어쩌면 내가 레디 스 해시를 사용할 수 있습니다 생각했다. 나는 내가 원하는 것을 얻을 수있는 올바른 구조를 찾을 수없는 것 같습니다.

의견을 보내 주시면 대단히 감사하겠습니다. 전에 REDIS를 사용하지 않았습니다. 당신이이 같은 증가 카운터를 액세스를받을 때

답변

0

계수를 들어, incr/decr 명령

http://redis.io/commands/incr

를 사용할 수 있습니다

 
    > incr counter:site2:20131101 
    (integer) 1 
    > incr counter:site1:20131103 
    (integer) 1 
    > incr counter:site1:20131103 
    (integer) 2 
    > incr counter:site2:20131103 
    (integer) 1 

당신이 카운터를 쿼리 할 때, 먼저 모든 키를 다음 요약 얻을 앱의 모든 카운터. 그러한 바와 같이 전체 증분 카운터

 
    > keys counter:site2:* # query by site 
    1) "counter:site2:20131101" 
    2) "counter:site2:20131103" 
    > get "counter:site2:20131101" 
    "1" 
    > get "counter:site2:20131103" 
    "1" 
    > keys counter:*:20131103 # query by date 
    1) "counter:site1:20131103" 
    2) "counter:site2:20131103" 
    ... 
+0

안녕하세요 떨림, 응답 해 주셔서 감사합니다! 프로덕션 환경에서 KEYS 사용에 대한 Redis 페이지의 면책 조항에 대해 걱정했습니다. http://redis.io/commands/keys. 나는 KEYS 대신에 사용해야하는 다른 방법이 있는지 확실하지 않습니다. 카운터 설정에 어떤 이점이 있습니까? ...? – Ptrkcon

+1

큰 데이터 세트에'keys '를 시도하지 않았으므로 크기가 얼마나 잘되는지 모르겠습니다. 또한 반복 가능한 작업이 개발 중이지만 안정적인 릴리스로 다시 백 포트되지 않았습니다. http://antirez.com/news/63 이것은 앞으로 더 쉽게 계산할 수 있습니다. Redis는 키 - 값 연산에 가장 적합합니다. 보고에 대한 세부 제어가 필요하다면 다른 데이터베이스에 데이터 세트를 저장해야합니다. – quiver

+0

해당 링크를 제공해 주셔서 감사합니다. 나는 그 특징을주의 깊게 관찰 할 것이고, 그것은 분명히 일을 더 쉽게 할 것이다. 보고면에서 나는 날짜, 날짜 범위 및 사이트 이름으로 질의하고 싶습니다. 나는 이것이 모두 현재 열쇠로 ​​할 수 있다고 생각한다. – Ptrkcon

1

this answer의 라인을 따라 구조는하기의 검증 방법이 될 것이다. 주어진 답은 이와 같이 시계열 데이터에 정렬 된 집합을 사용하는 것을 자세하게 설명합니다. 데이터를 롤링하는 방법도 있습니다 (월별 데이터를보고하려는 경우도 있습니다).

당신의 예 표시하는 표시로, 당신의 해상도가 키 사이트/도메인 이름으로 정렬 된 세트에 데이터를 저장하고 매일 타임 스탬프를 사용하고 [ZINCRBY][2] 당신을 잘 봉사 할 것입니다 구조는 다음 매일, 경우.

관련하여 keys ...하지 마세요. 단순히하지 마십시오.

대신 도메인/사이트 이름을 식별자로 사용할 때 키를 저장하도록 설정합니다. 사이트/도메인 이름으로 ZINCRBY을 실행할 때마다 sites-with-traffic:YYYY:MM:DD과 같은 "색인 키"에서 SADD 작업을 수행하십시오. 그렇게하면 해당 날짜의 고유 한 사이트 집합을 가져 와서 각 사이트에 대한 쿼리를 작성할 수 있습니다.

설명에 따르면 주어진 요일에 대해보고 할 수 있습니다. Redis를 사용하여이 작업을 수행하는 방법은 키 데이터가 있을지 여부를 간단히 쿼리하는 것입니다. 아무것도 얻지 못하면 해당 기간의 트래픽은 0입니다. 매개 변수 세트를 가지고있을 때 쿼리하지 마십시오. 목록에 나열된 이러한 쿼리 패턴 중 유일하게 알려지지 않은 것은 위에서 언급 한 사이트/도메인 이름이 될 것이고이를 필요에 따라 추가 할 수 있습니다.