Example #1
0
 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>();
 }
Example #2
0
 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>();
 }