0

저는 사람들이 사진을 업로드하고 다른 사용자와 의견을 교환 할 수있는 사진 앨범 시스템을 보유하고 있습니다. 나는 트래픽을 처리하고 데이터를 저장하기 위해 mySql과 Redis를 사용한다.Redis를 사용하여 알림 및 뉴스 영역

내 시스템에서 사용자는 사진과 같은 다른 사용자를 따라갈 수 있으며 댓글을 달고 새로운 사진을 업로드 할 수 있습니다.

이 시나리오에서는 facebook 타임 라인과 같이 벽에 사용자의 모든 일정을 표시하고 싶습니다.

예를 들어, 사용자 3040506070 및 80 명을 추적합니다. 새 사진을 추가 할 때마다 사진을 내 벽에 표시하고 싶습니다. 문제는 다음과 같습니다.

사용자 30 (his id)이 (가) 3 개의 새로운 사진을 추가했으며 photoevents : 30 : photoids -> [55,56,57]에이 정보를 추가했습니다. 이처럼 내 벽에 볼 수 있습니다 :

User 40 added 2 new photos [5,6].  
User 30 added 3 new photos [55,56,57] 

그러면, 사용자 (30)는 추가 :

User 30 added 3 new photos [55,56,57] 

그런 다음 사용자 40 그것은이처럼 내 벽에 볼이 개 새로운 사진 [5,6] 추가 2 개의 사진 더보기 [58,59]

어떻게 볼 수 있습니까? 두 번째 경우를 들어 그

User 30 added 5 new photos [55,56,57,58,59].  
User 40 added 2 new photos [5,6] 

또는

User 30 added 2 new photos [58,59] 
User 40 added 2 new photos [5,6].  
User 30 added 3 new photos [55,56,57] 

처럼

, 어떻게 벽 소유자가 볼 수있는 마지막 사진 무엇 이었습니까 알 수 있습니까? 어떤 것에 따르면, 나는 "새로운"숫자를 결정해야한다. 어떤 것이 합리적인 접근법인가? 이 데이터를 서버 측에 유지 (추종자 (예 : 사용자 50의 사용자 30의 최근 본 ID 등) 또는 클라이언트 측에서 처리하기 위해

답변

1

제 생각에는이 기능을 서버 측에서 처리해야합니다 특히 사용자가 여러 유형의 클라이언트 (예 : 브라우저, 휴대 전화 등)를 사용할 것으로 예상하는 경우

각 이벤트가 발생했을 때를 알고 범위를 수행 할 수 있으려면 각 이벤트에 타임 스탬프가 있어야합니다 예를 들어 지난 24 시간 동안의 이벤트 또는 타임 스탬프 X 이후의 이벤트 등을 검색해야합니다. X

그런 다음 다른 사용자를 따르는 사용자가 알림을보고 타임 스탬프를 설정할 수 있습니다 이 사용자가 이미 본 이벤트를 알기 위해 체크 포인트로 사용하고 해당 체크 포인트 이후의 이벤트 만 표시합니다.

우리 프로젝트의 REDIS에서 timeseries를 구현 한 방법은 정렬 된 집합 (http://redis.io/topics/data-types#sorted-sets)을 사용하는 것입니다. 귀하의 경우에 당신은 저장할 수 :

user1EventsKey -> [{ts1, eventKey1}, {ts2, eventKey2}, {ts3, eventKey3},... ] 
                  # This is the sorted set 
eventKey1 -> [photo1, photo2, photo3] 
eventKey2 -> [photo4, photo5] 
... 

user2Checkpoint -> tsA #where ts2 < tsA < ts3 

를 이제 다음 번에 사용자 2는 이벤트가 TSA가 ZRANGEBYSCORE user1EventsKey ts2 +inf 사용 후 무엇이든지 만 표시 모든 이벤트 키를 얻을 하나 당신이 수에 의해 다음 일 수 있습니다 알림을 보는 것을 알고있다 이벤트를 표시하십시오.

추신. 타임 스탬프는 UNIX 형식으로 저장할 수 있습니다.

이 정보가 도움이되기를 바랍니다.

+0

나는 당신 같은 조언을 사용하기로 결정했습니다. 감사 – ftb

관련 문제