2012-05-13 3 views
2

Redis, MongoDb 또는 기타 확장 성이 뛰어난 도구와 같은 외부 Db에서 .NET 세션 상태를 캐시할지 여부에 대한 조사를 수행했습니다.Redis, MongoDB, ServiceStack을 사용한 .NET 세션 상태 캐싱

내 연구 결과에 따르면 MongoDB가 이러한 종류의 작업을 수행하기 위해 더 많은 통합 기능을 갖추고 있지만 Redis는 훨씬 더 성능이 뛰어나고 더 많은 옵션 (키 만료, 세트 등)을 사용할 수 있습니다.

RedisClient 구현이있는 ServiceStack이라는 다른 프레임 워크가 있지만 IMHO 구현 방법은 내가 원하는 것보다 훨씬 더 결합되어 있습니다.

public override object OnGet(CachedOrders request) 
    { 
     var cacheKey = "some_unique_key_for_order"; 
     return base.RequestContext.ToOptimizedResultUsingCache(this.CacheClient, cacheKey,() => 
      { 
        //This delegate will be executed if the cache doesn't have an item 
        //with the provided key 

       //Return here your response DTO 
       //It will be cached automatically 
      }); 
    } 

따라서이 연구 후에, 나는 당신이 당신의 모든 앱에 캐싱 이런 종류의 구현 여부 의견을 알고 싶습니다. 당신이 경험을 공유 할 수 있습니까?

감사합니다.

답변

5

ServiceStack's 캐싱이 연결되어 있지 않은 경우 ToOptimizedResultUsingCache() 메서드는 단지 convenience Extension method이므로 최소한의 상용구 패턴을 구현할 수 있습니다. ToOptimizedResult 메서드는 IRequestContext의 MimeType 및 CompressionType을 기반으로 가장 최적화 된 결과를 반환합니다. 예 : JSON 서비스에서 일반적으로 JSON 응답 DTO의 출력이됩니다.

ServiceBase 클래스의 자동 배선 된 속성이므로 확장 메소드를 사용할 필요가 없으며 ICacheClient API에 직접 액세스 할 수 있습니다. ICacheClient API가 제공 할 수있는 것보다 더 많은 기능이 필요한 경우 RedisServiceStack's C# RedisClient을 사용하는 것이 좋습니다. 이렇게하면 분산 컴퍼 지 컬렉션에 빠르게 액세스 할 수 있습니다.

ICacheClient API를 사용하면 현재 실현 가능한 불가지론 캐싱 인터페이스가 InMemory, Redis and Memcached providers 인 이점이 있습니다.

0

나는 2 년 전에 NuGet 패키지를 작성했으며 그 이후로 제작 중에 사용 해왔다. 이 같은 다양한 기능, 레디 스에 지속성을 할 수있는 사용자 정의 클래스와 .NET SessionStateProvider를 오버라이드 (override) : 만 동일한 세션 ID로 여러 요청에서

  • 동시 세션 액세스를 변경 값 레디 스 쓸

    • (당신이 관심이 있다면 그렇게하는, REST의 원칙을 위반하더라도) 직렬화 형식의
    • 쉬운 사용자 정의를 웹 API에서 세션에 액세스 할 수
    • 능력 (자신의 롤 또는 변경 JSON 구조)

    여기 그것을 얻을 수 있습니다 https://www.nuget.org/packages/RedisSessionProvider

    문서 : https://github.com/welegan/RedisSessionProvider