Asp.Net Cache

Asp.net Cache


Output Cache

Usage

·        Cache all request: <%@ OutputCache Duration=”20” varybyparam =”none” %>

·        <varybyparam= “*”>: will cache for each request with query string

·        <varybyparam=”ProductId;ProductName”>: cache request with special query string

 

·        Vary by custom:

a. <varybyparam=”none”varybycustom=”browser” >

b.in global.asax file:

public override string GetVaryByCustomString(HttpContext context, string tag){

if(tag==”browser”){ return context.Request.Browser.Browser;}

}

 

This will cache for different browser.

 

·        Cacheby header :

<%@varybyparam =”none” varybyheader=”accept_product” %>

 

Scenario Example (varybyparam=”*”)

1.      Request a page without parameter -> store page copy A

2.      Request page pass Product id = 1 -> store page copy B

3.      Request page Pass product id = 2 -> store page copy C

4.      Request page Pass product id = 1 -> if copy B not expired , return copy  B

5.      Request page without parameter -> if copy A not expired , return copy A

 

Cache Profile and Configuration

Step 1:

<System.Web>

<Caching>

<OutputCacheSettings><OutputCacheProfiles>

<addname=”productCache” duration=”60”> -- seconds

</OutoutCacheProfiles></OutputCacheSettings></Cache></System.Web>

Step 2:

<%@OutputCache CacheProfile=”ProductCache” varybyparam=”none” %>

 

 

Cache Configuration

<System.Web><Caching><Cache

disableMemoryCollection=”true/false”– when memory is low need disable or not

disableExpiration=”true/false”

PercentagePhysicalMemoryUsedLimit=”90”—defaultis 90%

PrivateBytesLimit=”0”

privateBytesPoolTime=”00:2:00”

By default,Cache is stored in Cache Asp.net Process, so faster

For deploystrategy is not distribution system, suggest use this setting .

Distribute System Cache

1.      Storein disk – suggest store in SSD for high speed I/O

2.      SqlServer

3.      Windowsserver App Fabric

Custom Cache

 

For some reason (Distribute system), need to build a custom Cache

1.      Implement a Cache provider class by inherit from OutputCacheProvider

FileCacheProvider:OutputCacheProvider{

}

2.      Config:

<System.Web><Caching><OutputCache defaultProvider=”FileCache”>

<Providers><add name =”FileCache” type=”FileCacheProvider”CachePath=”~/~” />

</Providers><…>

Or just override a method in global file :

Public override string GetOutputCacheProviderName(HttpContext context){

//implementation

}

 

 

Data Cache

 

Page Data Cache

 

Global toall requests

Thread safe

If expires,automatically remove

Can set dependence to a file or db object, once dependency object changes, cache will be removed automatically

 

Expiration policy

Sliding expiration: 10 min – if not used within 10 min, then remove

Absolution expiration:10 min – after 10min , remove

 

Code:

Slide Expiration:

Cache.Insert(“item”,obj,null, DateTime.Max, TimeSpan.FromMin(10));

Absolute Expiration:

Cache.Insert(“item”,obj,null, DateTime.Now.AddMin(60), TimeSpan.Zero);

 

Cache Dependency

File

Db Object

Message Queue

 

Cache dependencynotification

Sql server

1.      sql server data table changed

2.      affects a registered command

3.      notification msg

 

 

 

Msmq

1.      Cache object set dependency in MSMQ

2.      Changes happen in MSMQ

3.      Notify  cache

 

Resource Cache

 

Cache by IIS .

你可能感兴趣的:(Asp.Net Cache)