Project Description
Take a simple, more effective method of caching items in .NET and ASP.NET. The developer team defines descriptive categories to decorate their objects, rather than arbitrary timeout values, which are then used by AspectCache to determine an overall caching policy at runtime.

Devised by Alex Norcliffe in 2007 as part of a personal project, this code has been maintained since and has been in use on very high traffic sites of over 40 million pageviews per month in the past three years and is battle-hardened.
It's 2010 and the time has come to share the code with the community!

Current features:

- Define cache categories in order to describe your objects:
-- Categories can signify that an object is Hi/Medium/Low memory usage, Hi/Medium/Low creation expense, Hi/Medium/Low change frequency
-- The combination of these three weightings, across all objects managed by the DescriptiveCache framework, is then used to determine actual timeout policies on the objects committed to the underlying cache provider.
-- Apply these categories to an object with an attribute, or for more flexibility reference the category name when you're adding the object to cache.
-- Don't worry about cache keys, or arbitrary timeout values ever again!
-- I devised this solution as a way to help large development teams define effective caching policies, since it is difficult for a single developer to know the priority of his/her object's timeout versus another part of the system in development by another member or whole team.

- Supports creating cache categories that cause objects to "survive application restarts" in order to provide lightening-quick cache warmup on app recycle.
-- Objects decorated with this preference are serialized to disk using a threaded queue supporting hundreds of requests per second without causing I/O bottlenecks.

- In-built support for replicating ASP.NET cache items to other web nodes in a load balanced environment.
-- Replication providers built-in:
--- SerializeToReplicationRoot uses the same high-performance serialization queue as above to put CacheBroadcastEvent objects into a folder you may use with DFS, ViceVersa, or another file replication software. The replication root path is used for incoming and outgoing cache broadcasts by using a FileSystemWatcher in your web application's app pool. (Documentation coming soon)
--- WebServiceBroadcast asynchronously notifies other nodes in the web farm by sending the CacheBroadcastEvent object directly to the other machines

- Current underlying caching providers supported: ASP.NET cache
-- Providers coming in February 2010: Memcached (got another preferred one? Suggest it in the Issue Tracker!)

Roadmap / Upcoming features
- Support for Memcached, NCache and ScalableCache will be added as cache providers so the DescriptiveFramework will be able to act on top of these distributed caches (in addition to the cache distribution already built-in)
- Web project demo in the solution
- Commandline test utility
- Adding performance counter hooks

Alex Norcliffe
19 Feb 2010

Last edited Feb 20, 2010 at 3:27 AM by boxbinary, version 5