PC41
[Link] 4.0 Cache Extensibility
Stefan Schackow
Program Manager
Microsoft Corporation
.NET Framework Caching
What's the current state?
Why is it changing?
How are we changing it?
Current Cache Functionality
A great in-memory object cache in [Link]
Lots of configurable "knobs"
Expiration policies
Automatic scavenging behavior
Before and after removal callbacks
Extensible cache dependencies
Output caching of [Link] content
Pages
Fragment caching of [Link] controls
Donut caching with cache substitution
Output caching of arbitrary HTTP response
Why Make Changes?
In-memory cache has various constraints
Object cache API exists in [Link]
Awkward to use object cache outside of [Link]
Common question: Why do I have to include
[Link] in my WPF/Winforms project?
Not available in 3.5 SP1 Client SKU
Caching is a "black box"
Where can vendors and developers plugin?
Memcached, Velocity, ScaleOut, etc… have no clean
integration point available to them
Output caching is completely opaque
Each custom caching solution is a completely
different API for developers to learn
Proposed New Cache Functionality
A new, extensible, object cache API in its
own namespace and assembly
Supports both client and server applications
Can be made available on both desktop and
client SKUs
A factored version of the [Link] cache engine
Extensible [Link] output caching
Consistent APIs for programming against
Disk-based output caches
Custom object caches
Cloud-based object caches
Distributed object caches
New 4.0 Cache Functionality
Namespace [Link]
{
Disk based In-memory
Cache
Windows
Azure
CacheProvider
Distributed
}
New 4.0 Cache Functionality
Namespace [Link]
{
CacheItemPolicy
(expirations, priority,
callbacks)
Cache CacheItem
CacheIte
m CacheItem CacheDependency
(Sql, Key-based, File)
}
demo
Object Caching
New 4.0 Output Cache Functionality
Namespace [Link]
{
[Link]
Disk based In-memory
[Link]
Windows
Azure
OutputCacheProvider
Distributed
}
demo
Output Caching
Core Versus Optional APIs
Cache API is a "union" of
common functionality
Not all cache providers need
to implement all features
Core functionality for all providers
Represented on CacheProvider base type
Storing and retrieving a key-value pair
Basic Add/Get/Set/Contains/Remove methods
Named cache partitions
Providers specialize by deriving from
InMemoryCacheProvider
OutOfProcessCacheProvider
InMemoryCacheProvider
Represents a provider running exclusively
in a single app-domain
Count of items in cache
Sliding expirations
Distributed caches usually can't synchronize sliding
expiration values across
multiple servers
Cache dependencies (derivations of
CacheDependency)
Distributed caches may have
no concept of dependencies
Item removal callbacks (before and after
removal)
Distributed caches may not be able
to call back to anything
OutOfProcessCacheProvider
Represents a provider that stores data
outside of an app-domain
Version-based updates ([Link])
Useful for caches that
support optimistic concurrency
Lock-based updates ([Link])
If a cache supports pessimistic concurrency
Get multiple items
Saves multiple round-trips on fetches
Query-tag metadata ([Link])
Retrieving multiple cache items based on string tags
"Velocity" Integration
"Velocity" – codename for distributed cache
created by the Sql Server team
Planned "Velocity" integration points
OutOfProcessCacheProvider implementation
for object caching
SessionStateStoreProviderBase implementation
for [Link] session state
Sidenote: Updates to session state API are planned
in 4.0 to allow for more granular sets and gets.
OutputCacheProvider implementation for
[Link] output caching
demo
Checking cache
capabilities
Migrating From Existing APIs
[Link]
Current plan is that it stays un-changed
Might enable "opting-in" to using an object
cache provider
Requires developing a “shim” that can re-route calls
to the new object cache provider layer
Currently the “shim” is only in the “idea phase”
[Link] output caching
Both page and control caching can opt-in to
using custom providers
By default both types of output caching
continue to use [Link]’s in-memory cache
Migrating From Existing APIs
[Link] control output caching
<@OutputCache
outputCacheProvider="…" />
[Link] page output caching
Programmatically choose different providers
Override a new method on HttpApplication
[Link]
Custom page output caching supports:
Absolute expirations
File-based dependencies only
Validation and substitution callbacks
must be static
Migrating From Existing APIs
[Link] [Link]
Cache Cache
CacheDependency CacheDependency
SqlCacheDependency SqlCacheDependency
FileCacheDependency constructor parameter
CacheKeyCacheDependency constructor parameter
[Link] method parameter
[Link] method parameter
[Link] various method parameters
CacheProvider & derivations hard-coded in-memory support
only
Summary
4.0 Caching is all about extensibility!
Both object caching and [Link] output
caching will be pluggable
New object cache APIs available for both
client and full versions of .NET Framework
Related Content
Breakout Sessions/Chalk Talks
PC21 – [Link] MVC
PC30 – [Link] Dynamic Data
PC31 – [Link] and Jquery
PC32 – [Link] Ajax Futures
PC33 – Microsoft Visual Studio:
Easing [Link] WebDev
PC41 – [Link] Cache Extensibility
TL48 – Microsoft Visual Studio:
Web Development Futures
ES15 – Deploying Web Applications with Microsoft
Internet Information Services 7.0 and the Web
Deployment Tool
Evals & Recordings
le a s e fill This sess
P ion will
r
out you for
be availa
ble as
l ua ti o n a record
eva n at: ing at:
ss io
this se
[Link]
QA &
Please use the microphones provided
© 2008 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.
The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market
conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT
MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.