feat(cache): adopt FusionCache for business caching
Some checks failed
ci / release-gate (push) Has been cancelled
Some checks failed
ci / release-gate (push) Has been cancelled
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using StackExchange.Redis;
|
||||
using ZiggyCreatures.Caching.Fusion;
|
||||
using ZiggyCreatures.Caching.Fusion.Backplane.StackExchangeRedis;
|
||||
|
||||
namespace Tiku.Infrastructure.Caching;
|
||||
|
||||
public static class BusinessCachingServiceCollectionExtensions
|
||||
{
|
||||
public const string CacheName = "TikuBusiness";
|
||||
|
||||
public static IServiceCollection AddBusinessCaching(
|
||||
this IServiceCollection services,
|
||||
string environmentName,
|
||||
bool useRedis)
|
||||
{
|
||||
ArgumentException.ThrowIfNullOrWhiteSpace(environmentName);
|
||||
|
||||
var normalizedEnvironment = Normalize(environmentName);
|
||||
var prefix = $"tiku:{normalizedEnvironment}:business:v2";
|
||||
var builder = services.AddFusionCache(CacheName)
|
||||
.WithOptions(options =>
|
||||
{
|
||||
options.CacheKeyPrefix = $"{prefix}:";
|
||||
options.BackplaneChannelPrefix = prefix;
|
||||
options.DistributedCacheCircuitBreakerDuration = TimeSpan.FromSeconds(2);
|
||||
})
|
||||
.WithDefaultEntryOptions(options =>
|
||||
{
|
||||
options.IsFailSafeEnabled = false;
|
||||
options.AllowBackgroundDistributedCacheOperations = false;
|
||||
options.AllowBackgroundBackplaneOperations = false;
|
||||
})
|
||||
.WithSystemTextJsonSerializer()
|
||||
.AsKeyedServiceByCacheName();
|
||||
|
||||
if (useRedis)
|
||||
builder
|
||||
.WithRegisteredDistributedCache()
|
||||
.WithBackplane(serviceProvider => new RedisBackplane(
|
||||
new RedisBackplaneOptions
|
||||
{
|
||||
ConnectionMultiplexerFactory = () => Task.FromResult(
|
||||
serviceProvider.GetRequiredService<IConnectionMultiplexer>())
|
||||
},
|
||||
serviceProvider.GetService<ILogger<RedisBackplane>>()));
|
||||
|
||||
return services;
|
||||
}
|
||||
|
||||
private static string Normalize(string value)
|
||||
{
|
||||
return value.Trim().ToLowerInvariant().Replace(' ', '-');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user