using Microsoft.Extensions.Configuration;
|
using Microsoft.Extensions.DependencyInjection;
|
using System.Linq;
|
using WIDESEAWCS_Core.Caches;
|
using WIDESEAWCS_RedisService.Bitmap;
|
using WIDESEAWCS_RedisService.Cache;
|
using WIDESEAWCS_RedisService.Configuration;
|
using WIDESEAWCS_RedisService.Connection;
|
using WIDESEAWCS_RedisService.Counter;
|
using WIDESEAWCS_RedisService.DelayQueue;
|
using WIDESEAWCS_RedisService.IdGenerator;
|
using WIDESEAWCS_RedisService.Leaderboard;
|
using WIDESEAWCS_RedisService.Geo;
|
using WIDESEAWCS_RedisService.Lock;
|
using WIDESEAWCS_RedisService.Monitoring;
|
using WIDESEAWCS_RedisService.Options;
|
using WIDESEAWCS_RedisService.PubSub;
|
using WIDESEAWCS_RedisService.RateLimiting;
|
using WIDESEAWCS_RedisService.Serialization;
|
using WIDESEAWCS_RedisService.Session;
|
using WIDESEAWCS_RedisService.Storage;
|
using WIDESEAWCS_RedisService.Stream;
|
|
namespace WIDESEAWCS_RedisService.Extensions
|
{
|
public static class RedisServiceSetup
|
{
|
public static IServiceCollection AddRedisSetup(this IServiceCollection services, IConfiguration configuration)
|
{
|
var section = configuration.GetSection("RedisConfig");
|
services.Configure<RedisOptions>(section);
|
|
var options = section.Get<RedisOptions>() ?? new RedisOptions();
|
|
if (!options.Enabled)
|
{
|
// Redis未启用,使用内存缓存
|
services.AddMemoryCache();
|
return services;
|
}
|
|
// 移除已有的ICacheService注册(MemoryCacheService),避免冲突
|
var existingDescriptor = services.FirstOrDefault(d => d.ServiceType == typeof(ICacheService));
|
if (existingDescriptor != null)
|
{
|
services.Remove(existingDescriptor);
|
}
|
|
// 基础设施
|
services.AddMemoryCache();
|
services.AddSingleton<IRedisSerializer, NewtonsoftRedisSerializer>();
|
services.AddSingleton<IRedisConnectionManager, RedisConnectionManager>();
|
|
// 缓存(替换原有MemoryCacheService)
|
services.AddSingleton<ICacheService, HybridCacheService>();
|
|
// 功能模块
|
services.AddSingleton<IDistributedLockService, RedisDistributedLockService>();
|
services.AddSingleton<ICounterService, RedisCounterService>();
|
services.AddSingleton<IMessageQueueService, RedisMessageQueueService>();
|
services.AddSingleton<IDelayQueueService, RedisDelayQueueService>();
|
services.AddSingleton<IStreamProcessingService, RedisStreamProcessingService>();
|
services.AddSingleton<ILeaderboardService, RedisLeaderboardService>();
|
services.AddSingleton<IGeoLocationService, RedisGeoLocationService>();
|
services.AddSingleton<IBitmapService, RedisBitmapService>();
|
services.AddSingleton<IBloomFilterService, RedisBloomFilterService>();
|
services.AddSingleton<IObjectStorageService, RedisObjectStorageService>();
|
services.AddSingleton<IDistributedIdGenerator, RedisDistributedIdGenerator>();
|
services.AddSingleton<IRateLimitingService, RedisRateLimitingService>();
|
services.AddSingleton<IConfigurationCenterService, RedisConfigurationCenterService>();
|
services.AddSingleton<ISessionStorage, RedisSessionStorage>();
|
services.AddSingleton<IRedisMonitorService, RedisMonitorService>();
|
|
// 后台服务(仅在启用L1缓存时注册)
|
if (options.EnableL1Cache)
|
{
|
services.AddHostedService<CacheSyncBackgroundService>();
|
}
|
|
return services;
|
}
|
}
|
}
|