You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

103 lines
2.5 KiB
C#

6 years ago
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<RedisHelper> lazy = new Lazy<RedisHelper>(() => 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<IServer> GetServers()
{
List<IServer> servers = new List<IServer>();
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;
}
}
}
}