Implemented distributed caching

This commit is contained in:
2026-09-03 11:09:05 +02:00
parent d55fb59d8d
commit da4499ce41
6 changed files with 40 additions and 6 deletions
+4 -3
View File
@@ -15,6 +15,8 @@ builder.Services.AddScoped<ActiveUserFilter>();
builder.Services.AddEndpoints(Assembly.GetExecutingAssembly());
builder.Services.AddApiServices(builder.Configuration);
builder.Services.AddRegisterServices(builder.Configuration);
builder.Services.AddEndpointAndServiceCaching(builder.Configuration);
builder.Services.AddMediator();
builder.Services.AddSecurityApiSdk(builder.Configuration);
@@ -27,7 +29,6 @@ builder.Services.AddQuartzScheduler(DefaultSchedulerName, builder.Configuration)
builder.Services.AddEmailServices(builder.Configuration);
builder.Services.AddHashServices(builder.Configuration);
builder.Services.AddGarageS3(builder.Configuration);
builder.Services.AddRegisterServices();
builder.Services.AddHttpClient();
builder.Services.AddDataProtectionDatabase(builder.Configuration);
@@ -98,12 +99,12 @@ app.UseHsts();
app.UseHttpsRedirection();
app.UseRouting();
app.UseOutputCache();
app.UseAuthentication();
app.UseAuthorization();
ApiVersionSet versionSet = app.NewApiVersionSet("v1")
.HasApiVersion(new ApiVersion(1))
.HasApiVersion(new ApiVersion(2))
.ReportApiVersions()
.Build();
@@ -111,7 +112,7 @@ var versionGroups = new Dictionary<int, RouteGroupBuilder>
{
{
1, app.MapGroup("v{version:apiVersion}").WithApiVersionSet(versionSet)
.RequireAuthorization("ApiScope").AddEndpointFilter<ActiveUserFilter>()
.RequireAuthorization("ApiScope").AddEndpointFilter<ActiveUserFilter>()
}
};
@@ -6,6 +6,21 @@ namespace PostFundManagement.Application.Extensions;
public static class Api
{
public static IServiceCollection AddEndpointAndServiceCaching(this IServiceCollection services, IConfiguration configuration)
{
services.AddStackExchangeRedisOutputCache(options =>
{
options.Configuration = configuration.GetConnectionString("Redis");
options.ConfigurationOptions?.ClientName = "PFM-API";
options.InstanceName = "PFM-API_";
});
services.AddOutputCache(options =>
options.AddBasePolicy(builder => builder.Expire(TimeSpan.FromMinutes(2))));
return services;
}
public static void ConfigureCookieOidcSameSiteSupport(this IServiceCollection services) =>
services.Configure<CookiePolicyOptions>(options =>
{
@@ -1,11 +1,12 @@
using PostFundManagement.Application.Abstractions;
using Microsoft.Extensions.Caching.Hybrid;
using PostFundManagement.Application.Abstractions;
using PostFundManagement.Domain.Abstractions;
namespace PostFundManagement.Application.Extensions;
public static class General
{
public static IServiceCollection AddRegisterServices(this IServiceCollection services)
public static IServiceCollection AddRegisterServices(this IServiceCollection services, IConfiguration configuration)
{
var serviceType = typeof(IService);
@@ -14,6 +15,15 @@ public static class General
foreach (var sharedImplementation in sharedImplementations) services.AddScoped(sharedImplementation);
services.AddStackExchangeRedisCache(options =>
options.Configuration = configuration.GetConnectionString("Redis"));
services.AddHybridCache(options => options.DefaultEntryOptions = new HybridCacheEntryOptions
{
Expiration = TimeSpan.FromMinutes(2),
LocalCacheExpiration = TimeSpan.FromMinutes(1)
});
return services;
}
@@ -2,6 +2,8 @@ namespace PostFundManagement.Domain.Extensions;
public static class Constants
{
public const string CachePolicy = "DefaultCachePolicy";
public const string EmailtemKey = "UserEmail";
public const string UserIdItemKey = "UserId";
@@ -12,6 +12,9 @@
<!-- Transformation -->
<ItemGroup>
<PackageReference Include="Humanizer" Version="3.0.10" />
<PackageReference Include="Microsoft.AspNetCore.OutputCaching.StackExchangeRedis" Version="10.0.11" />
<PackageReference Include="Microsoft.Extensions.Caching.Hybrid" Version="10.9.0" />
<PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="10.0.11" />
<Using Include="Humanizer" />
</ItemGroup>
+4 -1
View File
@@ -63,4 +63,7 @@ services:
- Email__Credentials__Password=${EMAIL_CREDENTIALS_PASSWORD}
- Email__Credentials__Username=${EMAIL_CREDENTIALS_USERNAME}
- Email__SmtpServer=${EMAIL_SMTP_SERVER}
- Email__SmtpPort=${EMAIL_SMTP_PORT:-587}
- Email__SmtpPort=${EMAIL_SMTP_PORT:-587}
# Redis overrides
- ConnectionStrings__Redis=${REDIS_CONNECTION_STRING:-192.168.1.171:6379,ssl=false,abortConnect=false}