2011-06-30 7 views
6

tengo el siguiente código para almacenar en caché algún código caro.¿durante cuánto tiempo, por defecto, las cosas permanecen en httpcache si no pongo una expiración explícita?

private MyViewModel GetVM(Params myParams) 
    { 
     string cacheKey = myParams.runDate.ToString(); 
     var cacheResults = HttpContext.Cache[cacheKey] as MyViewModel ; 
     if (cacheResults == null) 
     { 
      cacheResults = RunExpensiveCodeToGenerateVM(myParams); 
      HttpContext.Cache[cacheKey] = cacheResults; 
     }     
    return cacheResults; 
    } 

¿Estará en el caché para siempre? hasta que el servidor se reinicie o se quede sin memoria?

Respuesta

5

¿permanecerá esto en el caché para siempre?

Esto dependerá del proveedor de caché en particular que esté utilizando. Por ejemplo, si usa la caché en memoria predeterminada, puede caducar si el servidor comienza a quedarse sin memoria o si el grupo de aplicaciones se recicla. Pero si está utilizando algún otro proveedor de caché, como por ejemplo un caché distribuido como memcached o AppFactory, esto dependerá de la implementación en particular.

La regla de oro es nunca asumir que algo está dentro de la memoria caché porque la almacenó previamente. Siempre verifique primero la presencia del elemento en la memoria caché y, si no está presente, búsquelo y almacénelo nuevamente en la memoria caché.

Cuestiones relacionadas