I found this reference:
Solving the Caching Problem
Here's where I'd love to share the brilliant debugging and problem solving skills I used to fix the problem. Only I can't, because I could never work out what was wrong. To me, it would seem that using the simple overload [setCache(key,object)] just doesn't work properly.
What I did in the end was to use the same code I used for the Url Dictionary cache. This was a different overload because it used a callback and a fixed expiration time.
Here's the code:
DateTime absoluteExpiration = DateTime.Now.Add(settings.CacheTime);
DataCache.SetCache(UrlDictKey, urlDict, null, absoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.AboveNormal, onRemove, settings.CachePersistRestart);
This code uses a different overload, and for some reason, works properly. Testing confirmed it : previously, when hammering the test server with requests, eventually it would choke up as the database loaded up on queries to the same table over and over again. Now, there would be one call to the sp, the item would be cached, and the requests could go through without choking.
Found this reference at : http://www.ifinity.com.au/Blog/Technical_Blog/EntryId/55/DotNetNuke-Caching-and-a-performance-problem/
Hope I was able to help at least or point you in the right direction.