InfoQ

News

Using memcached with ASP.NET

Posted by Jonathan Allen on Jul 12, 2007 04:13 PM

Community
.NET
Topics
Clustering & Caching
Tags
Memcache

Instead of ASP.Net's built-in caching, some .NET developers are turning to memcached, is a distributed memory caching system originally by Danga Interactive for LiveJournal.

A fundamental problem with caching is stale data. When running a single web server, one can easily clear a cache when data is known to have been changed. Unfortunately, ASP.NET doesn't have a good way to scale this up multiple servers. Each server's cache is blissfully unaware of changes to other caches.

ASP.NET does allow triggers based on changes to the file system or a database table to invalidate a cache. However these have problems, such as the expensive polling that database triggers cause and the tedious wiring of the triggers themselves. There are other options however.

Unlike ASP.NET's built-in caching, memcached is a distributed cache. Any web server in can update or delete a cache entry and all the other servers automatically see the change next time they access the cache. This is done by storing the entries on one or more cache servers. Each entry assigned to a server based on a hash of its key.

Superficially, the ASP.NET API for memcached looks almost identical to the built-in API. This allows switching to memcached to be as easy as a single pass with search and replace.

Moving beyond just getting it running however, there are some questions as its proper use in larger web farms. Richard Jones writes

As we add more nodes, the usefulness of get_multi decreases - it's possible for a single page to hit almost all of the memcached instances. I read somewhere that facebook partition their memcached cluster to improve get_multi performance (eg, all user data on a subset of mc nodes). Can anyone comment on the effectiveness of this?

One proposed solution is to generate hash keys separately from the cache entire's key. This would allow a developer to ensure that all entries needed by a given page are more likely to be on the same server. Unfortunately, generating hash keys based on where one wants the data stored rather than from the cache key itself is likely to be error prone and will take careful implementation.

You can download memcached under a BSD license. Client APIs for C#, as well as Perl, Python, PHP, Java, and a host of other languages have to installed separately. Finally, there is a Win32 port for those not wanting to run Linux machines.

 

4 comments

Reply

Great Stuff by Aaron Erickson Posted Jul 13, 2007 12:56 PM
Re: Great Stuff by Nati Shalom Posted Jul 16, 2007 10:15 AM
Coherence by Cameron Purdy Posted Jul 16, 2007 12:51 PM
Re: CSQL Cache by kanchana p Posted Jun 7, 2008 12:05 AM
  1. Back to top

    Great Stuff

    Jul 13, 2007 12:56 PM by Aaron Erickson

    I am actually doing some work on a side project that could very much use this! Thanks for the story.

  2. Back to top

    Re: Great Stuff

    Jul 16, 2007 10:15 AM by Nati Shalom

    You can find similar and much more enhanced implementation of caching solution A.K.A DataGrid through GigaSpaces It comes with built-in partitioning, SLA driven container, support for Spring, SQL query support etc. A totally free community edition is also available which support basic hub/spoke clustering, persistencey etc. And there is a .net implementation available as well. HTH Nati S. GigaSpaces write once scale anywhere

  3. Back to top

    Coherence

    Jul 16, 2007 12:51 PM by Cameron Purdy

    We've been seeing a good number of migrations recently from Memcached to Coherence lately. In addition to the support model, the main reason seems to be the issues with the "opaqueness" of using Memcached, plus necessary features such as reliable write-behind, which are necessary for high performance database integration. Peace, Cameron Purdy Oracle Coherence: Data Grid

  4. Back to top

    Re: CSQL Cache

    Jun 7, 2008 12:05 AM by kanchana p

    If you are looking for an open source alternative, CSQL Cache is the answer. It support bi-directional, updateable, real time table caching for applications. Check out this blog for its functionalites, http://csqlcache.wordpress.com Project Page: http://sourceforge.net/projects/csql

Exclusive Content

Rob Windsor on WCF with REST, JSON and RSS

WCF is not just for SOAP based services and can be used with popular protocols like RSS, REST and JSON. Join Rob Windsor as he introduces WCF 3.5 and its new native support for non-SOAP services.

Christophe Coenraets Discusses Flex 3, AIR, and BlazeDS

Christophe Coenraets discusses Flex 3, Flex Builder, AIR, BlazeDS, Adobe and open source, integrating Flex with existing applications, and integrating RIAs with search engines and browsers.

Debunking Common Refactoring Misconceptions

Danijel Arsenovski attempts to dispel some of the myths around refactoring and how it applies to .NET developers.

REST Eye for the SOA Guy

In this presentation, recorded at QCon San Francisco, CORBA guru Steve Vinoski explains REST from the view of someone who comes to SOA from a traditional, RPC-oriented background.

Choose Feature Teams over Component Teams for Agility

Feature teams are key to scaling agility for large teams. In an excerpt from "Scaling Lean and Agile Development," Larman & Vodde show how feature teams resolve traditional problems & raise new issues

Billy Newport explains Virtualization

Billy Newport talks about virtualization, eXtreme Transaction Processing (XTP) and WebSphere Virtual Enterprise. He discusses hardware, hypervisor, JVM, application and data virtualization.

Virtualization and Security

While virtualization provides many benefits, security can not be a forgotten concept in its application.

Introduction to Agile for Traditional Project Managers

This session is specifically aimed at traditionally trained project managers who are new to Agile, and who would like to be able to relate the PMI's best practices to their Agile equivalents.