DefaultInMemoryCachingProvider
EasyCaching.InMemory is an in-memory caching lib which is based on EasyCaching.Core.
When you use this lib, it means that you will handle the memory of current server. As usual, we named it as local caching.
How to use ?
1. Install the package via Nuget
Install-Package EasyCaching.InMemory
2. Config in Startup class
There are two way's how you can configure caching provider.
By C# code:
public class Startup
{
//...
public void ConfigureServices(IServiceCollection services)
{
//other services.
//Important step for In-Memory Caching
services.AddEasyCaching(options =>
{
// use memory cache with a simple way
options.UseInMemory("default");
// use memory cache with your own configuration
options.UseInMemory(config =>
{
config.DBConfig = new InMemoryCachingOptions
{
// scan time, default value is 60s
ExpirationScanFrequency = 60,
// total count of cache items, default value is 10000
SizeLimit = 100,
// below two settings are added in v0.8.0
// enable deep clone when reading object from cache or not, default value is true.
EnableReadDeepClone = true,
// enable deep clone when writing object to cache or not, default value is false.
EnableWriteDeepClone = false,
};
// the max random second will be added to cache's expiration, default value is 120
config.MaxRdSecond = 120;
// whether enable logging, default is false
config.EnableLogging = false;
// mutex key's alive time(ms), default is 5000
config.LockMs = 5000;
// when mutex key alive, it will sleep some time, default is 300
config.SleepMs = 300;
}, "default1");
});
}
}
Alternatively you can store configuration in the appsettings.json
.
public class Startup
{
//...
public void ConfigureServices(IServiceCollection services)
{
//other services.
//Important step for In-Memory Caching
services.AddEasyCaching(options =>
{
//use memory cache
options.UseInMemory(Configuration, "default", "easycaching:inmemory");
});
}
}
appsettings.json
example:
"easycaching": {
"inmemory": {
"MaxRdSecond": 120,
"EnableLogging": false,
"LockMs": 5000,
"SleepMs": 300,
"DBConfig":{
"SizeLimit": 10000,
"ExpirationScanFrequency": 60,
"EnableReadDeepClone": true,
"EnableWriteDeepClone": false
}
}
}
3. Call the EasyCachingProvider
Following code shows how to use EasyCachingProvider in ASP.NET Core Web API.
[Route("api/[controller]")]
public class ValuesController : Controller
{
private readonly IEasyCachingProvider _provider;
public ValuesController(IEasyCachingProvider provider)
{
this._provider = provider;
}
[HttpGet]
public string Get()
{
//Remove
_provider.Remove("demo");
//Set
_provider.Set("demo", "123", TimeSpan.FromMinutes(1));
//Get
var res = _provider.Get("demo", () => "456", TimeSpan.FromMinutes(1));
//Get without data retriever
var res = _provider.Get<string>("demo");
//Remove Async
await _provider.RemoveAsync("demo");
//Set Async
await _provider.SetAsync("demo", "123", TimeSpan.FromMinutes(1));
//Get Async
var res = await _provider.GetAsync("demo",async () => await Task.FromResult("456"), TimeSpan.FromMinutes(1));
//Get without data retriever Async
var res = await _provider.GetAsync<string>("demo");
}
}
Precautions
If you need to modify the data after you read from cache, don't forget the enable deep clone, otherwise, the cached data will be modified.
By the way, deep clone will hurt the performance, so if you don't need it, you should disable.