2017-12-29 6 views
1

시나리오가 있으며 Azure Redis 캐시를 올바르게 사용하고 있는지 알고 싶습니다. 왜냐하면 확실히 어떤 성능도 그렇게 보이지 않기 때문입니다.Azure Redis Cache - 응용 프로그램 성능 향상

웹 앱을 사용하면 고객이 레코드를 만들고, 읽고 업데이트하며, 고객 레코드라고 가정합니다. Azure에는 SQL DB가 있으며 60,000 개의 고객 레코드가 있습니다. 예를 들어 고객 세부 정보, 이름, 전자 메일, 주소 등 하나의 테이블이 있다고 가정합니다.

캐시에 모든 레코드를 저장하는 대신 데이터베이스를 직접 쿼리하는 것이 더 빠르기 때문에 성능 향상을 위해이 웹 앱을 어떻게 작성해야할까요? 내가 현재 캐시 사용했다 : 등하는 List<T> 및 쿼리, fiter, 검색으로 직렬화 및 반환 모든 들어

  • 가 (, 정렬, 검색 등) 필터를 포함 읽어 나는 레디 스 캐시에서 데이터를 얻을 수를 결과.
  • 업데이트하려면 SQL 데이터베이스에서 레코드를 업데이트하고 db에서 모든 레코드를 List<T>으로 가져 와서 캐시에 저장하십시오.
  • 위의 업데이트와 동일하게 생성 및 삭제합니다.

캐시를 사용하면 성능에 별다른 이점이 없습니다. 잘못 사용합니까?

많은 데이터를 직렬화하고 캐시에 저장하는 것은 좋지 않은 생각입니다. 어떤 아이디어를 더 잘 만드는 방법?

답변

1

Redis에서 키를 통한 검색을 벤치마킹하지 않았지만 Redis가 모든 키를 검사하여 쿼리를 만족하는지 확인해야하므로 O (N) 검색 시간을 기대할 수 있습니다. 쿼리를 다루는 인덱스가있는 데이터베이스는 모든 레코드를 볼 필요가 없기 때문에 O (N) 시간보다 훨씬 적은 시간 내에 검색 할 수 있습니다. 대용량 데이터 세트의 경우 데이터베이스가 모든 레코드를 볼 필요가 없기 때문에 을 검색하면 더 잘 수행 될 수 있다고 생각합니다.

이제 Redis를 사용하여 성능을 향상시키는 가장 좋은 방법을 찾으십시오.

검색하려는 값의 키가있을 때 Redis가 켜집니다. 이 상황에서 매우 빠르며 단일 값 조회를 위해 성능면에서 SQL DB를 무너 뜨릴 것입니다. 읽기가 많은 데이터로 작업하는 경우 전반적으로 가장 효과적입니다. 예를 들어, 각 요청에 대해 검사해야하는 사용자 별 사용자 기본 설정 레코드가 응용 프로그램에있는 경우 Redis에서 캐싱을 수행 할 수있는 훌륭한 후보가됩니다. 데이터베이스 트래픽을 오프로드하여 Redis로 보내는 이점도 있습니다.

자세한 내용은 Cache Aside Pattern을 확인하십시오.

Redis와 작업하기위한 다른 하나의 방법 : ConnectionMultiplexor를 재사용하고 요청 당 Redis 캐시 인스턴스에 지속적으로 다시 연결하지 않는지 확인하십시오. 이것은 느리고 실제 캐시 당 최대 연결 제한이 있습니다.

+0

설명해 주셔서 감사합니다. 내 문제는 내가 개별적으로 모든 레코드를 캐시에 추가하지 않고 id로 가져 오는 것이 아니라 60000 개의 항목이 포함 된'List '입니다. 필자는이 목록을 JSON으로 serialize하고이 전체 JSON을 캐시에 'AllRecords'와 같은 키 아래에 저장하고이 키의 값은 60000 개의 레코드가있는 JSON입니다. 나는 이것이 나쁜 접근이라고 생각한다. 물론 모든 레코드를 하나씩 저장할 수 있고 Redis Cache의 키는 SQL db의 키와 동일 할 수 있지만 '모든 항목 쿼리'와 같은 Redis Cache에는 기능이 없습니다 ... – user2818430

+0

Azure에서 하나의 키 아래에 모든 키를 저장하지 않은 다음 해당 키를 기반으로 캐시에서 모든 레코드를 가져올 수 있지만 여전히 잘못된 aproach라고 생각합니다 – user2818430

관련 문제