Data Caching in SharePoint 2003

October 11, 2006

If you are used to the ASP.NET Cache object, you can use it in SharePoint (after all, it's just an ASP.NET extended application). However, the Web part framework encapsulates this Cache and enables you to have per-webpart and per-user cache. How? After a little bit of investigation I've found it out. The reason was to find out how to remove a cached item outside the webpart.

After inserting a key/value pair using SharePoint's PartCacheWrite method, SharePoint creates an entry in the Application Cache object (remember that the cache is shared among all the users), with a custom prefix attached to your own key. This prefix includes:

  • SharePoint webpart key:

    • Request URL

    • Creation date and time of the containing WebPartPage

    • Webpart UniqueID

  • User Security Identifier (SID) in hexadecimal format

  • "?" character which marks the end of SharePoint prefix

  • Your own key

 

So, let's say you've cached an object within a webpart named "_ctl6" (default names for no-name webparts) with a key of "abc" and that the webpart is placed under the URL "/C7/Informatica/default.aspx". The real cache key is:

/C7/Informatica/default.aspx09/27/2006 11:49:49_ctl60x01050000000000051500000069CE0AC3F42CDE9F7071B56E87080000?abc

It can be broken into the key components:

/C7/Informatica/default.aspx09/27/2006 11:49:49_ctl60x01050000000000051500000069CE0AC3F42CDE9F7071B56E87080000?abc

is composed of:

  • /C7/Informatica/default.aspx
    (Request URL)

  • 09/27/2006 11:49:49 (Creation date of the URL page in SharePoint server time)

  • _ctl6
    (UniqueID of the webpart)

  • 0x01050000000000051500000069CE0AC3F42CDE9F7071B56E87080000
    (User SID in hex format)

  • ? (separating character)

  • abc
    (your custom key)

     

It also inserts two dependency strings, used to invalidate per-webpart or per-user cached data. The names of those keys are Depend_String and Depend_String_Per_User, followed by a SharePoint webpart key:

Depend_String_Per_User/C7/Informatica/default.aspx09/27/2006 11:49:49_ctl7


Profile picture

Written by Edin Kapić Insatiably curious code-writing tinkerer. Geek father. Aviation enthusiast. Cuisine journeyman. Follow me on Twitter