2017-01-11 3 views
0

Redis를 캐시로 사용하기 시작했으며 응용 프로그램에 가장 적합한 구조가 확실하지 않습니다. 전체 구조는 다음과 같습니다 :데이터 원본, 사용자 및 쿼리가 포함 된 Redis 캐시

enter image description here

내가 할 수 있어야합니다 몇 가지 있습니다 : 데이터 소스에 대한

  1. 플러싱 다 (모든 사용자와 모든 쿼리).
  2. 특정 사용자 (e.x : 나는 사용자 1을 제거해야하며 데이터 소스 1과 데이터 소스 2의 쿼리 임)에 대해 모든 것을 플러시합니다.

트리에 나열된 모든 항목은 특정 데이터 소스에서 사용자 쿼리를 실행 한 결과에 액세스하는 데 필요한 키의 일부입니다. 나는 Redis를 처음 사용하고 있으며, 해시와 세트 사용 사이를왔다 갔다하고 있습니다.

옵션 1 (설정) : 나는 USER1 또는 DataSource1과 일치하는 모든 키를 찾아야하기 때문

DataSource1 => user1, user2, user3, user4 
DataSource1:user1 => Query1, Query2, Query3 
DataSource1:user1:Query1 => Results 

플러싱 일이 비싼 것입니다.

일부 옵션 2 (해시) :

users:user1 DataSource1:Query1 Results1 DataSource2:Query1 Results2 

데이터 소스 또는 사용자가 여기에 어떻게 작동하는지 플래시는 아직 확실하지 않다.

다른 생각이나 수정 사항이있는 사람이 있습니까?

답변

1

정보를 기반으로 DataSource -> Users 및 사용자 -> 쿼리에 대한 해시가있는 세트가 있습니다. 그런 식으로 사용자를 플러시하는 것은 해시를 삭제하는 것입니다. 데이터 소스를 플러시하는 것은 집합을 반복하고 사용자를 삭제 한 다음 데이터 소스 -> 사용자 집합을 삭제하는 것입니다.

집합의 첫 번째 옵션을 사용하면 사용자가 쿼리를 플러시 할 때마다 더 많은 작업이 수행되지만 실제로는 데이터에 액세스 할 수 있는지에 따라 달라집니다.

또한 사용자 당 저장하는 쿼리의 수에 따라 해시가 집합보다 효율적입니다.

+1

이 솔루션을 좋아합니다. 그것은 깨끗하고 간단합니다. 감사! –