當前位置: 妍妍網 > 碼農

【庫】Coravel Cache緩存

2024-03-04碼農

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); }