配置缓存
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddMemoryCache(options =>
{
options.SizeLimit = 10;//缓存大小
options.CompactionPercentage = 0.2;//缓存压缩
});
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
使用
1:基本使用
[Route("api/[controller]")]
[ApiController]
public class Sample01Controller : ControllerBase
{
private readonly IMemoryCache _cache;
public Sample01Controller(IMemoryCache memoryCache)
{
_cache = memoryCache;
}
public IActionResult Get()
{
if (!_cache.TryGetValue<string>("CacheTime", out var cacheTime))
{
_cache.Set("CacheTime", cacheTime = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"));
}
return Ok(new
{
cacheTime,
currentTime = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss")
});
}
}
2:过期时间
[Route("api/[controller]")]
[ApiController]
public class Sample02Controller : ControllerBase
{
private readonly IMemoryCache _cache;
public Sample02Controller(IMemoryCache memoryCache)
{
_cache = memoryCache;
}
public IActionResult Get()
{
if (!_cache.TryGetValue<string>("CacheTime", out var cacheTime))
{
var cacheEntryOptions = new MemoryCacheEntryOptions()
.SetSlidingExpiration(TimeSpan.FromSeconds(3));
_cache.Set("CacheTime", cacheTime = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"), cacheEntryOptions);
}
return Ok(new
{
cacheTime,
currentTime = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss")
});
}
}
3:绝对过期时间
[Route("api/[controller]")]
[ApiController]
public class Sample03Controller : ControllerBase
{
private readonly IMemoryCache _cache;
public Sample03Controller(IMemoryCache memoryCache)
{
_cache = memoryCache;
}
public IActionResult Get()
{
if (!_cache.TryGetValue<string>("CacheTime", out var cacheTime))
{
var cacheEntryOptions = new MemoryCacheEntryOptions()
.SetSlidingExpiration(TimeSpan.FromSeconds(3))
.SetAbsoluteExpiration(TimeSpan.FromSeconds(5));
_cache.Set("CacheTime", cacheTime = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"), cacheEntryOptions);
}
return Ok(new
{
cacheTime,
currentTime = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss")
});
}
4:缓存大小设置
[Route("api/[controller]")]
[ApiController]
public class Sample04Controller : ControllerBase
{
private readonly IMemoryCache _cache;
public Sample04Controller(IMemoryCache memoryCache)
{
_cache = memoryCache;
}
public IActionResult Get()
{
if (!_cache.TryGetValue<string>("CacheTime", out var cacheTime))
{
var cacheEntryOptions = new MemoryCacheEntryOptions
{
Size = 100
};
_cache.Set("CacheTime", cacheTime = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"), cacheEntryOptions);
}
return Ok(new
{
cacheTime,
currentTime = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss")
});
}
}
5:缓存优先级
[Route("api/[controller]")]
[ApiController]
public class Sample05Controller : ControllerBase
{
private readonly IMemoryCache _cache;
public Sample05Controller(IMemoryCache memoryCache)
{
_cache = memoryCache;
}
public IActionResult Get()
{
for (var i = 1; i <= 5; i++)
{
var cacheEntryOptions = new MemoryCacheEntryOptions
{
Priority = CacheItemPriority.Low,
Size = 1
};
_cache.Set(i, i.ToString(), cacheEntryOptions);
}
for (var i = 6; i <= 10; i++)
{
var cacheEntryOptions = new MemoryCacheEntryOptions
{
Priority = CacheItemPriority.Normal,
Size = 1
};
_cache.Set(i, i.ToString(), cacheEntryOptions);
}
{
var cacheEntryOptions = new MemoryCacheEntryOptions
{
Priority = CacheItemPriority.High,
Size = 1
};
_cache.Set(11, "11", cacheEntryOptions);
}
Console.WriteLine("-------------");
Console.WriteLine("Key\tValue");
for (var i = 1; i <= 11; i++)
{
Console.WriteLine($"{i}\t{_cache.Get<string>(i) ?? "N/A"}");
}
return Ok("ok");
}
}
6:综合使用
[Route("api/[controller]")]
[ApiController]
public class Sample06Controller : ControllerBase
{
private readonly IMemoryCache _cache;
public Sample06Controller(IMemoryCache memoryCache)
{
_cache = memoryCache;
}
public IActionResult Get()
{
var cacheTime = _cache.GetOrCreate("cacheTime", entry =>
{
entry.Priority = CacheItemPriority.Low;
entry.Size = 1;
entry.SlidingExpiration = TimeSpan.FromSeconds(3);
return DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");
});
return Ok(new
{
cacheTime,
currentTime = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss")
});
}
}
}