ServiceStack을 배우고 캐싱에 [Route] 태그를 사용하는 방법에 대해 질문이 있습니다. 내가 아이디를 전달할 때 개별 개체를 얻을 수있는 주요 캐시 모음을 사용할 수 있도록,ServiceStack 캐싱 전략
[Route("/applicationusers")]
[Route("/applicationusers/{Id}")]
public class ApplicationUsers : IReturn<ApplicationUserResponse>
{
public int Id { get; set; }
}
public object Get(ApplicationUsers request)
{
//var cacheKey = UrnId.Create<ApplicationUsers>("users");
//return RequestContext.ToOptimizedResultUsingCache(base.Cache, cacheKey,() =>
return new ApplicationUserResponse
{
ApplicationUsers = (request.Id == 0)
? Db.Select<ApplicationUser>()
: Db.Select<ApplicationUser>("Id = {0}", request.Id)
};
}
내가 원하는 것은 캐시 할 수있는 "ApplicationUsers"수집하고, 시간 : 여기에 내 코드입니다.
위 코드의 주석 처리를 제거하면 주 컬렉션이 "users"키 아래에 캐시되지만 제출 한 특정 쿼리는 다시 Db에 도달합니다. 나는 캐시에 대해 잘못 생각하고 있는가? 사전에
감사합니다, 마이크
var cacheKey = UrnId.Create<ApplicationUsers>("users");
는 모든 요청에 대해 동일한 캐시 키를 생성되고이 선, 당신은 "고유 키를 만들기 위해 요청 매개 변수 중 일부를 사용합니다
오른쪽. cacheKey에 고유 한 값을 입력하면 개별적으로 캐시됩니다. 그러나 그것은 내가 원하는 것이 아닙니다. 나는 "All"을 캐시하고 개별 요청에 캐시 된 "All"컬렉션을 사용하고 싶습니다. – MikeB
그런 경우 LINQ'var result = RequestContext.ToOptimizedResultUsingCache (Cache, cacheKey,() => GetAll())와 함께 "ToOptimizedResultUsingCache"를 사용한 후에 정적 캐시 키와 필터를 유지하십시오. if (request.Id == 0) 반환 결과; else return result.FirstOrDefault (item => item.Id == request.Id); – rudygt
"ToOptimizedResultUsingCache"가 개체를 반환하고 콘크리트로 캐스팅 할 수 없다는 문제가있었습니다. 유형. 이 시점에 이르러서는 아마도 설계된대로 캐싱을 사용하지 않을 것이라고 생각하기 시작했습니다. – MikeB