ASP. NET cache: methods and best practices

Source: Internet
Author: User

 

Http://msdn.microsoft.com/zh-cn/library/aa478965.aspx

 

Early cache; frequent Cache

Caching can mask many mistakes

 

As the simplest form of caching, the output cache only retains the HTML copies sent in response to the request in the memory. When there are other requests, the cache output will be provided until the cache expires. In this way, performance may be greatly improved (depending on the overhead required to create the original page output-the output of the sending cache is always fast and stable ).

Implementation

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

Like other page commands, this command should appear at the top of the ASPX page, that is, before any output. It supports five attributes (or parameters), two of which are required.

The combination of the required Duration and VaryByParam options can be used to handle most cases. For example, if your product directory allows users to view the directory Page Based on categoryID and page variables, you can use the parameter value to "categoryID; page "VaryByParam caches the product directory for a period of time (if the product is not changed at any time, one hour is acceptable, so the duration is 3600 seconds ). This creates separate cache entries for each directory page of each category. Each entry is counted from its first request for one hour.

Example: VaryByCustomUsed to support browser Customization

<%@ OutputCache Duration="60" VaryByParam="None" VaryByCustom="browser"  %>
 

Caching the entire page is usually not feasible because some parts of the page are customized for users. However, the rest of the page is shared by the entire application. These parts are most suitable for cache using fragment caching and user controls. Menu and other layout elements, especially those dynamically generated from the data source, should also be cached in this way. If necessary, you can configure the Cache control to be changed based on changes to its control (or other attributes) or any other changes supported by the page-level output cache. Using hundreds of pages of the same control group can also share the cache entries of those controls, rather than retaining a separate Cache version for each page.

Implementation

Example

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

In this example, the user control is cached for 60 seconds, and a separate cache entry is created for each change of the query string and for each page where the control is located.

<%@ OutputCache Duration="60" VaryByParam="none"  VaryByControl="CategoryDropDownList" %>

This example caches the user control for 60 seconds, and creates separate cache entries for each different value of the CategoryDropDownList control and for each page where the control is located.

<%@ OutputCache Duration="60" VaryByParam="none" VaryByCustom="browser"  Shared="true %>

Finally, this example caches the user control for 60 seconds and creates a cache entry for each browser name and major version. Then, the cache entries of Each browser will be shared by all pages that reference this user control (as long as all pages reference this control with the same ID ).

 

Page-level and user control-level output cache is indeed a way to quickly and easily improve site performance, but in ASP. NET, the real flexibility and powerful functions of the Cache are provided by the Cache object. With Cache objects, you can store any serializable Data Objects and control the expiration method of Cache entries based on the combination of one or more dependencies. These dependencies can include the time since the item was cached, the time since the item was last accessed, changes to files and/or folders, and changes to other cache items, after slight processing, you can also include changes to specific tables in the database.

In CacheMedium storage data

Example

Cache.Insert("key", myXMLFileData, new  System.Web.Caching.CacheDependency(Server.MapPath("users.xml")));

In this example, the xml data in the file can be inserted into the cache, without reading from the file in future requests. CacheDependency is used to ensure that the cache expires immediately after the file is changed, so that the latest data can be extracted from the file and cached again. If the cached data comes from several files, you can also specify an array of file names.

Cache.Insert("dependentkey", myDependentData, new  System.Web.Caching.CacheDependency(new string[] {}, new string[]  {"key"}));

In this example, the second data block with the key value "key" can be inserted (depending on whether the first data block exists ). If a key named "key" does not exist in the cache, or if the item associated with the key expires or is updated, the cache entry of "dependentkey" expires.

Cache.Insert("key", myTimeSensitiveData, null,  DateTime.Now.AddMinutes(1), TimeSpan.Zero);

Absolute Expiration: In this example, the cache will be cached for one minute, and the cache will expire after one minute. Note: the absolute expiration and sliding expiration (see below) cannot be used together.

Cache.Insert("key", myFrequentlyAccessedData, null,  System.Web.Caching.Cache.NoAbsoluteExpiration,  TimeSpan.FromMinutes(1));

Sliding Expiration: This example caches frequently used data. The data will be kept in the cache until it has not been referenced for up to one minute. Note: slide expiration and absolute expiration cannot be used together.

More options

CacheItemRemovedCallbackFunction. Most of the time, the default priority is enough-the cache engine can normally complete tasks and handle cache memory management. The CacheItemRemovedCallback option takes into account some interesting possibilities, but in fact it is rarely used. However, to illustrate this method, I will provide an example of its usage:

CacheItemRemovedCallbackExample

System.Web.Caching.CacheItemRemovedCallback callback = new System.Web.Caching.CacheItemRemovedCallback (OnRemove); Cache.Insert("key",myFile,null,  System.Web.Caching.Cache.NoAbsoluteExpiration,  TimeSpan.Zero,  System.Web.Caching.CacheItemPriority.Default, callback); . . . public static void OnRemove(string key,  object cacheItem,  System.Web.Caching.CacheItemRemovedReason reason) { AppendLog("The cached value with key '" + key +  "' was removed from the cache.  Reason: " +  reason.ToString());  }

This example uses

AppendLog()

This feature has a potential use-Refresh cached data in the background so that you never have to wait for data to be filled, but the data remains relatively new. But in fact, this feature is not applicable to the current version of the cache API, because the callback is not triggered or not completed before the cached items are deleted from the cache. Therefore, the user will frequently send a request to access the cache value, and then find that the cache value is empty and has to wait for the cache value to be refilled. I want to see an additional callback in future ASP. NET versions, which can be called CachedItemExpiredButNotRemovedCallback. If this callback is defined, it must be completed before deleting the cache item.

Cache Data Reference Mode

public DataTable GetCustomers(bool BypassCache) { string cacheKey = "CustomersDataTable"; object cacheItem = Cache[cacheKey] as DataTable; if((BypassCache) || (cacheItem == null)) { cacheItem = GetCustomersFromDataSource(); Cache.Insert(cacheKey, cacheItem, null, DateTime.Now.AddSeconds(GetCacheSecondsFromConfig(cacheKey),  TimeSpan.Zero); } return (DataTable)cacheItem; }

Note the following points about this mode:

    Some values (such as cacheKey, cacheItem, and cache duration) are defined at one time and only once.

  • You can skip the cache as needed-for example, when a new customer is registered and redirected to the customer list, the best way is to skip the cache and refill the cache with the latest data, this data includes newly inserted customers.

  • The cache can only be accessed once. This method improves performance and ensures that NullReferenceExceptions does not occur because the item exists during the first check, but has expired before the second check.

  • This mode uses the strong type check. The "as" Operator in C # tries to convert the object to the type. If the object fails or is empty, only null (null) is returned ).

  • The duration is stored in the configuration file. Ideally, all cache dependencies (whether file-based, time-based, or other types of Dependencies) should be stored in the configuration file, this allows you to make changes and easily measure performance. We also recommend that you specify the default cache duration. If you do not specify the duration for the used cacheKey, use the default duration for the GetCacheSecondsFromConfig () method.

An example of the relevant code is a helper class, which will handle all the above cases, but allows one or two lines of code to access the cached data. Download CacheDemos. msi.

 

Caching can greatly improve the performance of applications. Therefore, you should consider designing applications and testing the performance of applications. Applications always benefit from caching more or less. Of course, some applications are more suitable for caching than other applications. A deep understanding of the cache options provided by ASP. NET is an important skill that any ASP. NET developer should master.

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.