wanshenmean
2026-03-13 0dbc8273bdfbcabcc4b770546245f6b17d787de9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
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;
        }
    }
}