using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Configuration; using StackExchange; using StackExchange.Redis; using StackExchange.Redis.KeyspaceIsolation; namespace OAuth2Study.Cache.RedisCache { public sealed class RedisHelper { private static readonly Lazy lazy = new Lazy(() => new RedisHelper()); private RedisHelper() { } private string connectString; public string ConnectString { get { if (connectString == null) { connectString = ConfigurationManager.AppSettings["RedisConnectString"]; } return connectString; } set { connectString = value; } } private IConnectionMultiplexer connectionMultiplexer; public IConnectionMultiplexer Multiplexer { get { if (connectionMultiplexer == null) { ConfigurationOptions options=ConfigurationOptions.Parse(ConnectString); options.AllowAdmin = true; connectionMultiplexer=ConnectionMultiplexer.Connect(options); } return connectionMultiplexer; } set { connectionMultiplexer = value; } } public static RedisHelper Instance { get { return lazy.Value; } } public IDatabase GetDatabase(int dataIndex=15) { return Multiplexer.GetDatabase(dataIndex); } public List GetServers() { List servers = new List(); var points = Multiplexer.GetEndPoints(); foreach (var point in points) { servers.Add(Multiplexer.GetServer(point)); } return servers; } public IServer GetServer(System.Net.EndPoint endPoint) { var points = Multiplexer.GetEndPoints(); var point = points.FirstOrDefault(p => p == endPoint); if (point != null) { return Multiplexer.GetServer(point); } else { return null; } } } }