Pregunta

Para mi blog estoy queriendo utilizar la Caché de Salida para guardar una versión en caché de un particular post por alrededor de 10 minutos, y muy bien eso...

<%@OutputCache Duration="600" VaryByParam="*" %>

Sin embargo, si alguien envía un comentario, quiero borrar la caché para que se actualice la página y el comentario puede ser visto.

¿Cómo puedo hacer esto en ASP.Net C#?

¿Fue útil?

Solución

He encontrado la respuesta que estaba buscando:

HttpResponse.RemoveOutputCacheItem("/caching/CacheForever.aspx");

Otros consejos

Los de arriba están bien si usted sabe qué páginas desea borrar la caché.En mi caso (ASP.NET MVC) I hace referencia a los mismos datos de todo.Por lo tanto, cuando hice una [guardar] yo quería borrar la caché de todo el sitio.Esto es lo que ha funcionado para mí: http://aspalliance.com/668

Esto se realiza en el contexto de un OnActionExecuting filtro.Se podría fácilmente ser hecho por razones imperiosas de OnActionExecuting en un BaseController o algo.

HttpContextBase httpContext = filterContext.HttpContext;
httpContext.Response.AddCacheItemDependency("Pages");

Programa de instalación:

protected void Application_Start()
{
    HttpRuntime.Cache.Insert("Pages", DateTime.Now);
}

Pequeño Ajuste:Tengo un ayudante que añade que "los mensajes flash los mensajes flash" (mensajes de Error, mensajes de éxito - "Este artículo ha sido guardado con éxito", etc).Con el fin de evitar el mensaje flash de aparecer en cada una de las subsiguientes OBTENER, tuve que anular después de escribir el mensaje flash.

Limpieza De La Memoria Caché:

HttpRuntime.Cache.Insert("Pages", DateTime.Now);

Espero que esto ayude.

El Uso De La Respuesta.AddCacheItemDependency para borrar todos los outputcaches.

  public class Page : System.Web.UI.Page
  {
    protected override void OnLoad(EventArgs e)
    {
        try
        {
            string cacheKey = "cacheKey";
            object cache = HttpContext.Current.Cache[cacheKey];
            if (cache == null)
            {
              HttpContext.Current.Cache[cacheKey] = DateTime.UtcNow.ToString();
            }

            Response.AddCacheItemDependency(cacheKey);
        }
        catch (Exception ex)
        {
            throw new SystemException(ex.Message);
        }

        base.OnLoad(e);
    }     
 }



  // Clear All OutPutCache Method    

    public void ClearAllOutPutCache()
    {
        string cacheKey = "cacheKey";
        HttpContext.Cache.Remove(cacheKey);
    }

Esto también puede ser utilizado en ASP.NET MVC OutputCachedPage.

En la página principal evento de carga, por favor escriba lo siguiente:

Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();

y en el botón de cerrar sesión haga clic en:

Session.Abandon();
Session.Clear();

Hmm.Puede especificar un atributo VaryByCustom en el OutputCache elemento.El valor de este es que se pasa como parámetro a la GetVaryByCustomString método que se puede aplicar en el mundial.asax.El valor devuelto por este método se utiliza como un índice en los elementos almacenados en caché - si usted devuelve el número de comentarios en la página, por ejemplo, cada vez que se agrega un comentario de una nueva página se almacenan en caché.

La contrapartida de esto es que en realidad, no se borra la memoria caché.Si una entrada de blog se hace pesado el comentario de uso, su caché puede explotar en tamaño con este método.

Alternativamente, se puede aplicar el no cambiables bits de la página (la navegación, los anuncios, el real de la entrada de blog) como controles de usuario e implementar parcial de la página de la caché en cada uno de los controles de usuario.

Si cambia de "*" sólo los parámetros de la caché debe variar en (PostID?) usted puede hacer algo como esto:

//add dependency
string key = "post.aspx?id=" + PostID.ToString();
Cache[key] = new object();
Response.AddCacheItemDependency(key);

y cuando alguien agrega un comentario...

Cache.Remove(key);

Supongo que esto iba a funcionar, incluso con VaryByParam *, ya que todas las solicitudes estaría vinculado a la misma dependencia de caché.

¿por qué no utilizar el sqlcachedependency en los puestos de la tabla?

sqlcachedependency de msdn

De esta manera su no aplicación de caché personalizado compensación de código y simplemente actualizar la caché como los cambios de contenido en la base de datos?

HttpRuntime.Close() ..Yo intente de todo método y este es el único que funciona para mí

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top