asp.net core 9中,引入了HyBridCache,本質上他並不是全新的一種緩存,而以與原來的緩存復合使用。
<ProjectSdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<PackageReferenceInclude="Microsoft.Extensions.Caching.StackExchangeRedis"Version="9.0.0-preview.4.24267.6" />
</ItemGroup>
</Project>
下面的例子,time0是記憶體緩存,time1是基於Redis分布式緩存,time3是混合式緩存。
如果說time0,time1是自己當家做主的話,那麽tim2就要基於Memory或Distributed緩存了。預設狀況下,builder.Services.AddHybridCache是基於記憶體緩存的,如果想基於別的分布式緩存,只需要添加對應的Service就可以了。
using Microsoft.Extensions.Caching.Distributed;
using Microsoft.Extensions.Caching.Hybrid;
using Microsoft.Extensions.Caching.Memory;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddMemoryCache();
builder.Services.AddStackExchangeRedisCache(opt =>
{
opt.ConfigurationOptions = new StackExchange.Redis.ConfigurationOptions
{
EndPoints = { "localhost:6379" },
AbortOnConnectFail = false
};
});
builder.Services.AddHybridCache();
var app = builder.Build();
app.MapGet("/time0", async (IMemoryCache cache) =>
{
returnawait cache.GetOrCreateAsync("time0", async _ => await Task.FromResult(DateTime.Now));
});
app.MapGet("/time1", async (IDistributedCache cache) =>
{
var time = await cache.GetStringAsync("time1");
if (string.IsNullOrWhiteSpace(time))
{
time = DateTime.Now.ToString();
await cache.SetStringAsync("time1", time);
}
return time;
});
app.MapGet("/time2", async (HybridCache cache) =>
{
returnawait cache.GetOrCreateAsync("time2", async _ => await Task.FromResult(DateTime.Now));
});
app.Run();
如上程式碼,如果添加了記憶體,和一種分布式,那麽混合緩存用的是誰呢?請自行試驗,可以把結果同步到本篇文章的評論裏。:)