0

我必須在asp.net web api方法中實現緩存,因爲我正在訪問來自第三方數據源的數據並且調用第三方數據源代價很高,數據只會每24小時更新一次。所以有Strathweb。我的幫助下已經實現了緩存這樣Webapi中的服務器端緩存和客戶端緩存

/// <summary> 
    /// Returns the sorted list of movies 
    /// </summary> 
    /// <returns>Collection of Movies</returns> 
    [CacheOutput(ClientTimeSpan = 86400, ServerTimeSpan =86400)] 
    public IEnumerable<Movie> Get() 
    { 
     return repository.GetMovies().OrderBy(c => c.MovieId); 
    } 

/// <summary> 
/// Returns a movie 
/// </summary> 
/// <param name="movie">movieId</param> 
/// <returns>Movie</returns> 
[CacheOutput(ClientTimeSpan = 86400, ServerTimeSpan = 86400)] 
public Movie Get(int movieId) 
{ 
     var movie = repository.GetMovieById(movieId); 
     if (movie == null) 
     { 
      var httpResponseMessage = new HttpResponseMessage(HttpStatusCode.NotFound) 
      { 
       Content = new StringContent(string.Format("No movie with ID = {0}", movieId)), 
       ReasonPhrase = "Movie ID Not Found" 
      }; 
      throw new HttpResponseException(httpResponseMessage); 
     } 
     return movie; 
} 

但在Strathweb,我已經看到兩個屬性之一是ClientTimeSpan及其他是ServerTimeSpan.I我不知道何時使用ClientTimeSpan以及何時使用ServerTimeSpan。在最簡單的術語中,我想了解何時使用服務器端緩存以及何時使用客戶端緩存以及兩者之間有什麼區別。

+0

[類似的問題在SO](http://stackoverflow.com/questions/17287144/how-to-cache-net-web-api-requests- use-w-angularjs-http)可以幫助你。 – 2014-10-08 05:01:18

回答

1

作爲定義說

ClientTimeSpan(對應於CacheControl最大生存週期HTTP報頭)

ServerTimeSpan(時間多長的響應應該在服務器端進行緩存)

代碼示例,以解釋。

//Cache for 100s on the server, inform the client that response is valid for 100s 
[CacheOutput(ClientTimeSpan = 100, ServerTimeSpan = 100)] 
public IEnumerable<string> Get() 
{ 
    return new string[] { "value1", "value2" }; 
} 


//Inform the client that response is valid for 50s. Force client to revalidate. 
[CacheOutput(ClientTimeSpan = 50, MustRevalidate = true)] 
public string Get(int id) 
{ 
    return "value"; 
} 

SOURCE

+0

感謝Arindam幫助我在2天內解決2個問題。 – F11 2014-10-16 04:48:24

+0

你能幫我解決這個問題嗎你能幫我解決這個問題嗎?http://stackoverflow.com/questions/26398129/caching-search-result-in-web-api – F11 2014-10-16 09:21:56

2

ClientTimeSpan

使用,如果你想允許客戶端(通常是瀏覽器)在本地緩存用戶的計算機上的數據的客戶端緩存。好處是客戶端可能不會在緩存過期之前請求您的API。另一方面,由於存儲在客戶端,因此無法使該緩存無效。將此緩存用於非動態/不頻繁更改的數據。

ServerTimeSpan

您的服務器上存儲數據。你可以很容易地使這個緩存無效,但它需要一些資源(內存)