.NET 7 MemoryCache Statistics 4
After we have finished displaying memorycache entries, we can also track it’s statistics by using MemoryCacheStatistics
which is included in .NET 7.
We will modify our CacheBase.cs
first. Need a method that invokes GetCurrentStatistics()
public MemoryCacheStatistics GetStats()
{
return _cache.GetCurrentStatistics();
}
It will return MemoryCacheStatistics
which has useful properties such as; TotalHits, TotalMisses
Everytime reading from cache will increase TotalHits
, If there is no matching cache entries it will increase TotalMisses.
In our design, if there is no cache entry it will call ReloadCache
. So we will see that both will increase at the same time.
Let’s write a new endpoint that returns GetStats()
[HttpGet]
[Route("GetStats")]
public IActionResult GetStats(string key)
{
string typeName = $"webappart.{key}"; // replace namespace with yours
Type type = Type.GetType(typeName);
if (type == null)
{
return null;
}
dynamic service = provider.GetService(type);
var stats = service.GetStats();
return Ok(stats);
}
With 15 seconds of AbsoulteExpiration
. First attempt looks like this,

204- NO CONTENT
We have to set TrackStatistics property when we are registering
MemoryCache
!
builder.Services.AddMemoryCache(options => { options.TrackStatistics = true; });
After we have done it we can try again,

We need to call cache items when they were expired. So let’s decrease AbsoulteExpiration
to 1 seconds in ConfigurationCache.cs
protected override MemoryCacheEntryOptions SetPolicy()
{
MemoryCacheEntryOptions options = new MemoryCacheEntryOptions();
options.AbsoluteExpiration = DateTime.Now.AddSeconds(1); // here
return options;
}
And after I have executed every seconds to api/Cache/Get
We have some misses,

This statistics can be a guide for using memory cache properly. If there is a lot of misses, your AbsoluteExpiration
might be low or this cache should use SlidingExpiration
instead.