AppFabric Caching

From HandWiki

AppFabric Caching provides an in-memory, distributed cache platform for Windows Server.[1] Microsoft developed AppFabric Caching and released it as part of AppFabric.

Architecture

AppFabric Caching stores serialized managed objects in a cache cluster. The cache cluster consists of one or more machines that pool their available physical memory.[2] This pooled memory is presented to cache clients as a single source of caching memory. Objects are stored and accessed using an associated key value.

AppFabric Caching features must be installed on each server in the cache cluster.[3] Following installation, the AppFabric Configuration Wizard must be used to join each server to the cache cluster.[4] An external file share or database is required to maintain the cache cluster configuration settings.[5] A set of Windows PowerShell commands for Caching provides administration capabilities on the cache cluster.[6]

Code examples

Note that the code samples in this section are shown in C#.

A common task is to create code that puts, retrieves, and removes objects from the cache. These operations target either the default cache or a named cache.[7]

First, create a static DataCache[8] member:

public static DataCache _cache;

Next, create a method that accesses this cache. The properties of the cache can be stored in the app.config or web.config files.[9] The cache settings can also be programmatically configured.[10] The following example shows how to programmatically configure the cache.

public static DataCache GetCache()
{
    if (_cache != null)
        return _cache;
 
    // Define array for 1 cache host
    var servers = new List<DataCacheServerEndpoint>(1);
 
    // Specify cache host details
    //   Parameter 1 = host name
    //   Parameter 2 = cache port number
    servers.Add(new DataCacheServerEndpoint("mymachine", 22233));
 
    // Create cache configuration
    var configuration = new DataCacheFactoryConfiguration();
       
    // Set the cache host(s)
    configuration.Servers = servers;
       
    // Set default properties for local cache (local cache disabled)
    configuration.LocalCacheProperties = new DataCacheLocalCacheProperties();
 
    // Disable tracing to avoid informational/verbose messages on the web page
    DataCacheClientLogManager.ChangeLogLevel(System.Diagnostics.TraceLevel.Off);
 
    // Pass configuration settings to cacheFactory constructor
    _factory = new DataCacheFactory(configuration);
 
    // Get reference to named cache called "default"
    _cache = _factory.GetCache("default");
       
    return _cache;
}

The following method shows how to use the _cache object to retrieve data from the cache. In this example, a user identifier (userId) is the key for the associated user information object. The code first attempts to get this user information from the cache using the userId key. If that does not succeed, the code retrieves the information with a database query and then stores the returned user data in the cache. The next time the same code is run, the user information will be returned from the cache rather than the database. This assumes that the cached data has not been expired or evicted.

dataType GetUserData(string userId) 
{
    dataType data = null;

    // Attempt to retrieve the user data from the cache:
    object dataObject = _cache.Get(userId);

    if (dataObject != null)
        data = (dataType)dataObject;
    else
    {
        // If it doesn't exist in the cache, retrieve it from the database:
        data = GetUserDataFromDatabase("SELECT * FROM users WHERE userid = @userId", userId);

        // Put the returned data in the cache for future requests:
        _cache.Add(userId, data);
    }

    return data;
}

The following method shows how to update data that is already in the cache.

void UpdateUserData(string userId, dataType data) 
{
    // Update the user information in the database:
    result = UpdateUserDataInDatabase(userId, data);
    
    if (result) 
    {
        // If successfully updated, update the cache:
        _cache.Put(userId, data);
    }
}

The following call removes the item from the cache.

_cache.Remove(userId);

History

Originally, AppFabric Caching had several beta releases under the code name Velocity.[11] In June 2010, Microsoft officially released AppFabric Caching as part of AppFabric.[12] For more detailed information, see the history section of the AppFabric page.

Related caching technologies

AppFabric Caching is related to other Microsoft caching technologies. These technologies share similar features, such as the assembly name, namespace, and types.[13] However, there are some differences. The table below describes these technologies.

Caching Technology Target Installed By Description
AppFabric Caching On-premises AppFabric Distributed on-premises cache that uses servers that the user provisions and manages.
Windows Azure Caching Cloud Windows Azure SDK Caching is distributed across the instances of a single role in a Windows Azure cloud service deployment.
Windows Azure Shared Caching Cloud Windows Azure SDK Caching is provided as a multitenant service for use by Windows Azure cloud services.

References

  1. "AppFabric 1.1 Caching Features". MSDN Library. Microsoft. 12 September 2012. http://msdn.microsoft.com/en-us/library/hh334305(v=azure.10).aspx. Retrieved 13 February 2013. 
  2. "AppFabric Caching Physical Architecture Diagram". MSDN Library. Microsoft. 12 September 2012. http://msdn.microsoft.com/en-us/library/hh334311(v=azure.10).aspx. Retrieved 13 February 2013. 
  3. "Installing and Configuring AppFabric". MSDN Library. Microsoft. 26 October 2012. http://msdn.microsoft.com/en-us/library/hh334300(v=azure.10).aspx. Retrieved 13 February 2013. 
  4. "Configure AppFabric". MSDN Library. Microsoft. 12 September 2012. http://msdn.microsoft.com/en-us/library/hh351248(v=azure.10).aspx. Retrieved 13 February 2013. 
  5. "Cluster Configuration Storage Options". MSDN Library. Microsoft. 12 September 2012. http://msdn.microsoft.com/en-us/library/hh334393(v=azure.10).aspx. Retrieved 13 February 2013. 
  6. "Using Windows PowerShell to Manage AppFabric 1.1 Caching Features". MSDN Library. Microsoft. 12 September 2012. http://msdn.microsoft.com/en-us/library/hh351331(v=azure.10).aspx. Retrieved 13 February 2013. 
  7. "AppFabric Caching Logical Architecture Diagram". MSDN Library. Microsoft. 12 September 2012. http://msdn.microsoft.com/en-us/library/hh351438(v=azure.10).aspx. Retrieved 13 February 2013. 
  8. "DataCache Class". MSDN Library. Microsoft. http://msdn.microsoft.com/en-us/library/microsoft.applicationserver.caching.datacache.aspx. Retrieved 13 February 2013. 
  9. "XML-Based Client Configuration". MSDN Library. Microsoft. 12 September 2012. http://msdn.microsoft.com/en-us/library/hh351456(v=azure.10).aspx. Retrieved 13 February 2013. 
  10. "Programmatic Client Configuration". MSDN Library. Microsoft. 12 September 2012. http://msdn.microsoft.com/en-us/library/hh351493(v=azure.10).aspx. Retrieved 13 February 2013. 
  11. "Build Better Data-Driven Apps With Distributed Caching". MSDN Magazine. Microsoft. http://msdn.microsoft.com/en-us/magazine/dd861287.aspx. Retrieved 13 February 2013. 
  12. "Microsoft Delivers Release Candidate of Windows Server AppFabric, Beta Release of BizTalk Server 2010". Microsoft News Center. Microsoft. http://www.microsoft.com/en-us/news/press/2010/may10/05-20winservappfabpr.aspx. Retrieved 13 February 2013. 
  13. "Differences Between Caching On-Premises and in the Cloud". MSDN Library. Microsoft. http://msdn.microsoft.com/en-us/library/gg185678.aspx. Retrieved 13 February 2013. 

External links