using Autofac; using Hangfire; using StackExchange.Redis; using StackExchange.Redis.Extensions.Core; using StackExchange.Redis.Extensions.MsgPack; using System; using System.Configuration; using System.Runtime.Caching; namespace TestApp02.Utility { public static class CacheRegistration { private static Lazy lazyConnection = new Lazy(() => { return GetConnectionMultiplexer(cacheConfig.Redis.HostName); }, System.Threading.LazyThreadSafetyMode.ExecutionAndPublication); public static ConnectionMultiplexer Connection { get { return lazyConnection.Value; } } public static void AutofacInitialize(ContainerBuilder builder) { CacheHelper.CacheExpirationTime = 180; builder.Register(c => new MsgPackObjectSerializer()).As().InstancePerRequest(); builder.Register(c => new StackExchangeRedisCacheClient(Connection, c.Resolve(), cacheConfig.Redis.Database)).As().InstancePerRequest(); builder.RegisterType().As().InstancePerRequest(); } public static ConnectionMultiplexer GetConnectionMultiplexer(string hosts) { ConfigurationOptions options = new ConfigurationOptions(); try { options.Ssl = (cacheConfig.Redis.Ssl == 1); options.SyncTimeout = cacheConfig.Redis.syncTimeout; options.AbortOnConnectFail = false; options.ConnectRetry = 5; options.DefaultDatabase = cacheConfig.Redis.Database; if (!string.IsNullOrEmpty(cacheConfig.Redis.Password)) { options.Password = cacheConfig.Redis.Password; } //options.ReconnectRetryPolicy = new LinearRetry(5000); foreach (var item in hosts.Split(',')) { if (string.IsNullOrEmpty(item)) { continue; } options.EndPoints.Add(item, cacheConfig.Redis.Port); } return ConnectionMultiplexer.Connect(options); } finally { options = null; } } } }