2011-03-31 4 views
2

asp.net 4.0에서 웹 사이트 사용자 데이터를 캐시하는 가장 좋은 방법은 무엇입니까?asp.net 응용 프로그램에서 사용자 데이터 캐싱

UI 요소 (열기/닫기) 상태, 환경 설정, 일부 대화 상자 해제 여부 등과 같은 모든 종류의 사용자 또는 세션 관련 항목을 추적하는 사용자 설정 테이블이 있습니다. 이들은 (사용자마다, 어쨌든) 자주 변경되지 않지만 자주 조회되므로 캐시하는 것이 현명합니다. 가장 좋은 방법은 뭔가요? 다음은 ...

  1. 스토어 그들 HttpContext.Current.Session에 직접적으로 (예를 들어, Session["setting_name"])
  2. 스토어 그들 HttpContext.Current.Cache
  3. 를 사용하여 글로벌 정적 사전에, 예를 들어, 내가 발견 한 옵션입니다 키는 고유 한 사용자 ID는

이 작업을 수행 할 수있는 가장 합리적인 방법은 무엇입니까 Session 또는 Cache 각 세션 이름 값을

  • 스토어 사전 개체를 설정 +입니다 static ConcurrentDictionary<string,string>? SessionCache과 어떻게 다른가요? 사전을 하나의 세션/캐시 객체로 저장하는 대신 많은 값을 직접 추가하는 것이 의미가 있습니까? 조회가 더 빠를 것이라고 생각하지만, 사전이 변경되면 전체 사전을 다시 저장해야하므로 업데이트 속도가 느려집니다.

    글로벌 정적 캐시를 사용할 때 발생할 수있는 문제점이나 이점은 무엇입니까? 이게 가장 빠를 것 같지만 크기를 관리해야합니다. 특정 크기에 도달하면 정기적으로 플러시 할 수 있고, 크로스 레퍼런스 대기열을 유지하고 특정 크기가되면 가장 오래된 것을 먼저 제거 할 수 있습니다. 이것은 어떤 의미가 있거나 너무 열심히 노력하고 있습니까?

  • 답변

    1

    Session에 대한 memcached를에 정보를 넣어 더 좋을 수도 있습니다. 응용 프로그램이 단일 서버가 아닌 서버 팜에서 호스팅되는 경우 세션 데이터베이스를 사용하는 것입니다. 서버 팜은 향상된 확장 성 및 안정성을 제공하며 일반적으로 일반적인 배포 시나리오입니다. 그것에 대해 생각해 봤어? 또한

    , 당신은 Session을 사용하지에서 프로세스, 그것은의 프로세스 아웃 또는 데이터베이스로 전송 및 검색 할 때 를 직렬화 할 직렬화 점점 끝, 그리고 효과적으로무엇을하고 있는지 당신은 위의 설명 : 나는 그것을 변경하는 경우 전체 사전을 다시 저장 이있을 것이다 이후

    ... 업데이트가 느린 것입니다. ...

    .. 이후, 개별 세션 키를 사용하는 경우에도 사용자에 대한 전체 Session 객체 직렬화 (한 번에 모든) 함께 직렬화이다.

    반면 팜의 특정 서버에서는 Cache이 인 이므로 프로세스 나 데이터베이스를 사용하는 것보다 훨씬 효율적입니다. 그러나 한 서버의 캐시에있는 항목이 다른 서버의 캐시에 없을 수도 있습니다.따라서 사용자의 후속 요청이 팜의 다른 서버로 지정된 경우 해당 서버의 캐시에 아직 사용자의 항목이 없을 수 있습니다.

    성능상의 이유로 캐싱하는 경우 Cache을 사용하는 것이 좋습니다.

    p.s. 예, 너무 열심히 노력하고 있습니다. 정말로해야 할 때까지 바퀴를 재발 명하지 마십시오. :-)

    +0

    하나의 서버에 캐시 된 것이 다른 서버에서 사용할 수 없게되면 서버 팜이 가능합니다 (사이트가 현재 단일 인스턴스로 호스팅 됨에도 불구하고) 데이터베이스에서 다시). 가야 할 길 같은데. –

    -1

    비싼 검색 할 수있는의 - 프로세스에서 또는 데이터베이스에 저장되는 끝낼 수 확장 성

    관련 문제