public RedisCache(IRedisClientsManager redisClientsManager, CacheExpireTimeConfig cacheExpireTimeConfig, RedisManualConfig redisManualConfig, ILoggerFactory loggerFactory) { _redisClientsManager = redisClientsManager; if (cacheExpireTimeConfig != null) { if (cacheExpireTimeConfig.DefaultSlidingExpireTime.HasValue) { DefaultSlidingExpireTime = cacheExpireTimeConfig.DefaultSlidingExpireTime.Value; } if (cacheExpireTimeConfig.DefaultAbsoluteExpireTime.HasValue) { DefaultAbsoluteExpireTime = cacheExpireTimeConfig.DefaultAbsoluteExpireTime.Value; } } ManualConnectionTimeout = redisManualConfig.ManualConnectionTimeout; Logger = loggerFactory.CreateLogger <RedisCache>(); }
private static void AddRedis(this IServiceCollection services, Action <CacheExpireTimeConfig> cacheAction = null) { services.AddSingleton(_ => { var config = new CacheExpireTimeConfig(); cacheAction?.Invoke(config); return(config); }); // 使用单例模式 // 对于 Redis 哨兵模式,在初次连接哨兵集群时出现网络故障,后续网络恢复后依旧可继续使用,不用担心单例导致一直处于故障中 services.AddSingleton(sp => { var provider = sp.GetRequiredService <IRedisProvider>(); return(provider.CreateRedisClientsManager()); }); services.AddTransient <ICache, RedisCache>(); }