|
|
using Admin.Core.Common;
|
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
|
using StackExchange.Redis;
|
|
|
using System;
|
|
|
|
|
|
namespace Admin.Core.Extensions
|
|
|
{
|
|
|
/// <summary>
|
|
|
/// Redis缓存 启动服务
|
|
|
/// </summary>
|
|
|
public static class RedisCacheSetup
|
|
|
{
|
|
|
public static void AddRedisCacheSetup(this IServiceCollection services)
|
|
|
{
|
|
|
if (services == null) throw new ArgumentNullException(nameof(services));
|
|
|
|
|
|
services.AddTransient<IRedisBasketRepository, RedisBasketRepository>();
|
|
|
|
|
|
// 配置启动Redis服务,虽然可能影响项目启动速度,但是不能在运行的时候报错,所以是合理的
|
|
|
services.AddSingleton<ConnectionMultiplexer>(sp =>
|
|
|
{
|
|
|
//获取连接字符串
|
|
|
string redisConfiguration = Appsettings.app(new string[] { "Redis", "ConnectionString" });
|
|
|
|
|
|
var configuration = ConfigurationOptions.Parse(redisConfiguration, true);
|
|
|
|
|
|
configuration.ResolveDns = true;
|
|
|
|
|
|
return ConnectionMultiplexer.Connect(configuration);
|
|
|
//return GetRedisConnection();
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 核心代码,获取连接实例
|
|
|
/// 通过双if 加lock的方式,实现单例模式
|
|
|
/// </summary>
|
|
|
/// <returns></returns>
|
|
|
public static ConnectionMultiplexer GetRedisConnection()
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
//获取连接字符串
|
|
|
string redisConfiguration = Appsettings.app(new string[] { "Redis", "ConnectionString" });
|
|
|
|
|
|
var config = new ConfigurationOptions
|
|
|
{
|
|
|
AbortOnConnectFail = false,
|
|
|
AllowAdmin = true,
|
|
|
ConnectTimeout = 15000,//改成15s
|
|
|
SyncTimeout = 5000,
|
|
|
//Password = "Pwd",//Redis数据库密码
|
|
|
EndPoints = { redisConfiguration }// connectionString 为IP:Port 如”192.168.2.110:6379”
|
|
|
};
|
|
|
return ConnectionMultiplexer.Connect(config);
|
|
|
}
|
|
|
catch (Exception)
|
|
|
{
|
|
|
throw new Exception("Redis服务未启用,请开启该服务,并且请注意端口号,本项目使用的的6319,而且我的是没有设置密码。");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|