2013-06-28 2 views
1

나는 소셜 네트워킹 응용 프로그램에서 Instagram/facebook과 비슷한 '피드'시스템을 구현하기 위해 Redis를 사용하고 있습니다.Redis 삭제 정렬 된 집합에서 항목

나는 그림을 가리키는 ID의 정렬 된 집합을 포함하는 "user:id:feed" 키가 있습니다. 내가 궁금해하는 점은 특정 사진을 삭제할 때 해당 사진 ID가 포함 된 모든 피드에서 사진 ID가 삭제되는지 어떻게 확인할 수 있습니까?

각 피드 세트를 반복해야하고 삭제해야합니까? 그것은 redis에서 일반적인 패턴인가요?

감사합니다.

답변

2

Redis의 공통 패턴은 다양한 데이터 구조의 항목을 상호 참조하는 것입니다. 명시 적으로해야합니다 (Redis에서는 자동 참조 무결성 메커니즘이 없습니다).

여기에는 피드와 사진 사이에 다 대다 관계가 있습니다. 피드와 사진을 모두 추가/제거해야하는 경우이 관계를 구체화하기 위해 2 개의 개별 데이터 구조를 사용하는 것이 좋습니다.

user:id:feed -> sorted sets of photo:n (referring to photos) 
photo:n  -> set of user:id:feed (referring to feeds) 

이렇게하면 피드의 사진과 피드의 피드를 효율적으로 검색 할 수 있습니다. 인스턴스가 사진을 삭제하려면 : 그래서 삭제 작업이 마지막으로 비용되어

: N

  • 파이프 라인을 여러 ZREM 작업 (ID : 피드 사용자 당 하나)

    • 는 사진에서 피드를 검색 왕복 2 회. Lua 서버 측 스크립트를 사용하여 1 왕복으로 줄일 수 있습니다.

  • 0

    내 두 센트 : MongoDB를 사용

    는 피드 구조가 더 적합하며뿐만 아니라 중첩 된 구조에서 ID 기반 데이터 연산 처리로 이행한다. 사용자의 모든 관련 정보를 한 행에 보관 한 다음 한 번의 호출로 검색하고 삭제할 수 있습니다.

    관련 문제