2010-03-12 17 views
5

Estoy revisando el OutputCacheProvider en ASP.NET 4.0 y utilizándolo para almacenar mi caché de salida en la base de datos de MongoDb. No puedo entender el propósito del método Add que es uno de los métodos de reemplazo para OutputCacheProvider. El método Add se invoca cuando tiene VaryByParam configurado en algo. Entonces, si tengo VaryByParam = "id", se invocará el método Add..NET 4.0 Implementación de OutputCacheProvider

Pero después de que también se invoca Add the Set y puedo insertarlo en la base de datos de MongoDb dentro del método Set.

public override void Set(string key, object entry, DateTime utcExpiry) 
{ 
    // if there is something in the query use the path and query to generate the key 
    var url = HttpContext.Current.Request.Url; 

    if (!String.IsNullOrEmpty(url.Query)) 
    { 
     key = url.PathAndQuery; 
    } 

    Debug.WriteLine("Set(" + key + "," + entry + "," + utcExpiry + ")"); 
    _service.Set(
     new CacheItem() { Key = MD5(key), Item = entry, Expires = utcExpiry } 
    ); 
} 

Dentro del método Set utilizo el PathAndQuery para obtener los parametros de la cadena de consulta y luego hacer un MD5 en la llave y guardarla en la base de datos MongoDB.

Parece que el método Add será útil si estoy haciendo algo como VaryByParam = "custom" o algo así.

¿Alguien puede arrojar algo de luz sobre el método Add de OutputCacheProvider?

Respuesta

8

Son similares, pero hay una pequeña diferencia. Mirando a la documentación de MSDN para la clase OutputCacheProvider

  • Set - "inserta el entrada especificada en la memoria caché de salida, sobrescribir la entrada si se ya en caché"
  • Add - "Inserciones la entrada especificada en la salida caché. "

Las observaciones para "Añadir" ir a decir

"Si ya existe un valor en el caché para la clave especificada, el proveedor debe devolver ese valor. El proveedor de debe no almacene los datos pasado utilizando el método Add parámetros. el método Add almacena los datos si no está ya en la caché. Si los datos están en la memoria caché, el método Add devuelve"

Por lo tanto, para los valores nuevos que aún no están en la memoria caché se comportarán de manera idéntica, pero cuando el valor ya exista, Set lo actualiza, mientras que Agregar deja el valor original intacto.