Simple way to implement caching in ASP.NET Web API

http://stackoverflow.com/questions/18937545/caching-application-data-in-memory-mvc-web-api


另附:WebCache Class https://msdn.microsoft.com/en-us/library/system.web.helpers.webcache(v=vs.111).aspx

原文:http://blog.developers.ba/simple-way-implement-caching-asp-net-web-api/

This article is not about caching the output of APIControllers.
Often in ASP.NET Web API you will have a need to cache something temporarily in memory probably to improve performance.

There are several nice libraries that allow you to do just that.

One very popular is CacheCow and here you will find a very nice article how to use this library.

But what if you want to do caching without third party library in a very simple way?
 
If you want to learn more about ASP.NET Web API I recommend a great book that I love written by real experts:
 
BookWebAPIEvolvable
Designing Evolvable Web APIs with ASP.NET 

Caching without third party library in a very simple way

I had a need for this. I implemented some basic authentication for the ASP.NET Web API with Tokens and wanted to cache Tokens temporarily in memory to avoid going into the database for every HTTP request.

The solution is very simple.
You just need to use Microsoft class for this called MemoryCache which resides inSystem.Runtime.Caching dll.

 

I created a simple helper class for caching with few lines of code:

 

public class MemoryCacher
{
   public object GetValue( string key)
   {
     MemoryCache memoryCache = MemoryCache.Default;
     return memoryCache.Get(key);
   }
 
   public bool Add( string key, object value, DateTimeOffset absExpiration)
   {
     MemoryCache memoryCache = MemoryCache.Default;
     return memoryCache.Add(key, value, absExpiration);
   }
 
   public void Delete( string key)
   {
     MemoryCache memoryCache = MemoryCache.Default;
     if (memoryCache.Contains(key))
     {
        memoryCache.Remove(key);
     }
   }
}

When you want to cache something:

memCacher.Add(token, userId, DateTimeOffset.UtcNow.AddHours(1));

 

And to get something from the cache:

var result = memCacher.GetValue(token);

 
 
 
NOTE: You should be aware that MemoryCache will be disposed every time IIS do app pool recycle.

If your Web API :

  • Does not receive any request for more that 20 minutes
  • Or hit default IIS pool interval 1740 minutes
  • Or you copy a new version of your ASP.NET Web API project into an IIS folder (this will auto-trigger app pool recycle)

So you should have a workaround for this. If you don’t get value from the cache you should grab it for example from a database and then store it again in the cache:

 

var result = memCacher.GetValue(token);
if (result == null )
{
     // for example get token from database and put grabbed token
     // again in memCacher Cache
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值