Coravel 通过使高级应用程序功能(如任务/作业调度、排队、缓存、邮件(以及更多!))易于访问且易于使用,帮助开发人员快速启动并运行 .NET 应用程序。具有简单、富有表现力和直接的语法。
Coravel非常简单,通过Rember来保存缓存数据,同时可以设定缓存的时长,然后通过Get来获取缓存。
using Coravel;
using Coravel.Cache.Interfaces;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddCache();
var app = builder.Build();
app.MapGet("/add", async (ICache cache) =>
{
await cache.RememberAsync("time", async () =>
{
returnawait Task.FromResult(DateTime.Now);
}, TimeSpan.FromSeconds(10));
});
app.MapGet("/read", async (ICache cache) =>
{
if (await cache.HasAsync("time"))
{
returnawait cache.GetAsync<DateTime>("time");
}
else
{
return DateTime.MinValue;
}
});
app.Run();
ICache几个方法:
方法名
|
说明
|
Remember
| 添加有时长的缓存数据 |
RememberAsync
| 添加无时长的缓存数据,异步方法 |
Forever
| 添加无时长的缓存数据 |
ForeverAsync
| 添加无时长的缓存数据 ,异步方法 |
HasAnync
|
判断有无缓存数据
|
GetAsync
|
获取缓存数据
|
Flush
|
清空所有缓存数据
|
Forget
|
释放某个缓存数据
|
当然,上面的例子是本地内存缓存,这对于分布式不友好,其实库里也提供了持久化的缓存机制,官方库提供了SqlServer和PostgreSQL两种持久化机制。如果想适配自己的库,那就实现ICache接口即可,这个接口的成员就是上面的表格中那些,分别完成对数据库或其他持久化库的封装即可。
ICache接口如下:
publicinterfaceICache
{
TResult Remember<TResult>(string key, Func<TResult> cacheFunc, TimeSpan expiresIn);
Task<TResult> RememberAsync<TResult>(string key, Func<Task<TResult>> cacheFunc, TimeSpan expiresIn);
TResult Forever<TResult>(string key, Func<TResult> cacheFunc);
Task<TResult> ForeverAsync<TResult>(string key, Func<Task<TResult>> cacheFunc);
Task<bool> HasAsync(string key);
Task<TResult> GetAsync<TResult>(string key);
voidFlush();
voidForget(string key);
}