此操作已在命令映射中禁用,无法使用:AUTH: RedisCommandException
This operation has been disabled in the command-map and cannot be used: AUTH: RedisCommandException
我有以下代码来设置 Sentinel Redis 连接。
var redisConfiguration = configuration.GetSection(redisSettingsJsonSection).Get<EightRedisConfiguration>();
var configOptions = new ConfigurationOptions
{
ServiceName = redisConfiguration.ServiceName,
TieBreaker = string.Empty,
DefaultVersion = new Version(
redisConfiguration.DefaultVersionMajor,
redisConfiguration.DefaultVersionMinor,
redisConfiguration.DefaultVersionBuild),
Password = redisConfiguration.Password,
AbortOnConnectFail = redisConfiguration.AbortOnConnectFail,
Ssl = redisConfiguration.Ssl,
AllowAdmin = redisConfiguration.AllowAdmin,
ConnectTimeout = redisConfiguration.ConnectTimeout,
DefaultDatabase = redisConfiguration.Database
};
foreach (var redisHost in redisConfiguration.Hosts)
{
configOptions.EndPoints.Add(redisHost.Host, redisHost.Port);
}
configOptions.CommandMap = redisConfiguration.IsSentinelCluster ? CommandMap.Sentinel : CommandMap.Default;
services.AddSingleton(_ =>
ConnectionMultiplexer
.Connect(configOptions, logTextWriter)
.GetSentinelMasterConnection(configOptions));
我收到以下异常。
at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean wrapExceptions, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& hasNoDefaultCtor)
at System.RuntimeType.CreateInstanceDefaultCtorSlow(Boolean publicOnly, Boolean wrapExceptions, Boolean fillCache)
at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, Boolean wrapExceptions)
at System.Activator.CreateInstance(Type type, Boolean nonPublic, Boolean wrapExceptions)
at System.Activator.CreateInstance(Type type)
This operation has been disabled in the command-map and cannot be used: AUTH: RedisCommandException
at StackExchange.Redis.CommandMap.AssertAvailable(RedisCommand command) in /_/src/StackExchange.Redis/CommandMap.cs:line 169
at StackExchange.Redis.ConnectionMultiplexer..ctor(ConfigurationOptions configuration) in /_/src/StackExchange.Redis/ConnectionMultiplexer.cs:line 1141
at StackExchange.Redis.ConnectionMultiplexer.CreateMultiplexer(Object configuration, LogProxy log, EventHandler`1& connectHandler) in /_/src/StackExchange.Redis/ConnectionMultiplexer.cs:line 958
at StackExchange.Redis.ConnectionMultiplexer.ConnectImpl(Object configuration, TextWriter log) in /_/src/StackExchange.Redis/ConnectionMultiplexer.cs:line 1014
at StackExchange.Redis.ConnectionMultiplexer.Connect(ConfigurationOptions configuration, TextWriter log) in /_/src/StackExchange.Redis/ConnectionMultiplexer.cs:line 1002
配置如下
"DefaultVersionMajor": 4,
"DefaultVersionMinor": 0,
"DefaultVersionBuild": 11,
"ServiceName": "eight-sentinel",
"IsSentinelCluster": true,
"Password": "AWESOME_PASSWORD",
"AllowAdmin": true,
"Ssl": false,
"ConnectTimeout": 3000,
"ConnectRetry": 2,
"Database": 0,
"Hosts": [
{
"Host": "redis-1.com",
"Port": 26379
},
{
"Host": "redis-2.com",
"Port": 26379
},
{
"Host": "redis-3.com",
"Port": 26379
}
]
我对这个问题有点迷茫,不确定它背后的信息,我可以使用 Redis 桌面管理器客户端连接到哨兵集群,只需添加第一个实例。
我也有类似的问题,经过一些研究,我意识到他们在库中有一些问题,似乎使用 ConfigurationOptions
.
有问题
正如它所建议的那样here
,如果您通过连接字符串创建连接,它会起作用
using(var connection=new ConnectionMultiplexer.Connect("10.1.3.11:26379,10.1.3.12:26379,10.1.3.13:26379,serviceName=redis-primary,AllowAdmin=true"))
{
// do stuff
}
您必须在连接字符串中指定 ServiceName
才能连接到 Sentinel。
他们引入了一种新方法 SentinelConnect
,该方法不适用于相同的连接字符串!
如果您使用的 StackExchange.Redis.Extensions.Core
库没有带连接字符串的构造函数,您应该创建一个 RedisConfiguration 的空实例,并在 ConnectionPoolManager 实现中通过 ConnectionString 进行连接。
我有以下代码来设置 Sentinel Redis 连接。
var redisConfiguration = configuration.GetSection(redisSettingsJsonSection).Get<EightRedisConfiguration>();
var configOptions = new ConfigurationOptions
{
ServiceName = redisConfiguration.ServiceName,
TieBreaker = string.Empty,
DefaultVersion = new Version(
redisConfiguration.DefaultVersionMajor,
redisConfiguration.DefaultVersionMinor,
redisConfiguration.DefaultVersionBuild),
Password = redisConfiguration.Password,
AbortOnConnectFail = redisConfiguration.AbortOnConnectFail,
Ssl = redisConfiguration.Ssl,
AllowAdmin = redisConfiguration.AllowAdmin,
ConnectTimeout = redisConfiguration.ConnectTimeout,
DefaultDatabase = redisConfiguration.Database
};
foreach (var redisHost in redisConfiguration.Hosts)
{
configOptions.EndPoints.Add(redisHost.Host, redisHost.Port);
}
configOptions.CommandMap = redisConfiguration.IsSentinelCluster ? CommandMap.Sentinel : CommandMap.Default;
services.AddSingleton(_ =>
ConnectionMultiplexer
.Connect(configOptions, logTextWriter)
.GetSentinelMasterConnection(configOptions));
我收到以下异常。
at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean wrapExceptions, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& hasNoDefaultCtor)
at System.RuntimeType.CreateInstanceDefaultCtorSlow(Boolean publicOnly, Boolean wrapExceptions, Boolean fillCache)
at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, Boolean wrapExceptions)
at System.Activator.CreateInstance(Type type, Boolean nonPublic, Boolean wrapExceptions)
at System.Activator.CreateInstance(Type type)
This operation has been disabled in the command-map and cannot be used: AUTH: RedisCommandException
at StackExchange.Redis.CommandMap.AssertAvailable(RedisCommand command) in /_/src/StackExchange.Redis/CommandMap.cs:line 169
at StackExchange.Redis.ConnectionMultiplexer..ctor(ConfigurationOptions configuration) in /_/src/StackExchange.Redis/ConnectionMultiplexer.cs:line 1141
at StackExchange.Redis.ConnectionMultiplexer.CreateMultiplexer(Object configuration, LogProxy log, EventHandler`1& connectHandler) in /_/src/StackExchange.Redis/ConnectionMultiplexer.cs:line 958
at StackExchange.Redis.ConnectionMultiplexer.ConnectImpl(Object configuration, TextWriter log) in /_/src/StackExchange.Redis/ConnectionMultiplexer.cs:line 1014
at StackExchange.Redis.ConnectionMultiplexer.Connect(ConfigurationOptions configuration, TextWriter log) in /_/src/StackExchange.Redis/ConnectionMultiplexer.cs:line 1002
配置如下
"DefaultVersionMajor": 4,
"DefaultVersionMinor": 0,
"DefaultVersionBuild": 11,
"ServiceName": "eight-sentinel",
"IsSentinelCluster": true,
"Password": "AWESOME_PASSWORD",
"AllowAdmin": true,
"Ssl": false,
"ConnectTimeout": 3000,
"ConnectRetry": 2,
"Database": 0,
"Hosts": [
{
"Host": "redis-1.com",
"Port": 26379
},
{
"Host": "redis-2.com",
"Port": 26379
},
{
"Host": "redis-3.com",
"Port": 26379
}
]
我对这个问题有点迷茫,不确定它背后的信息,我可以使用 Redis 桌面管理器客户端连接到哨兵集群,只需添加第一个实例。
我也有类似的问题,经过一些研究,我意识到他们在库中有一些问题,似乎使用 ConfigurationOptions
.
正如它所建议的那样here ,如果您通过连接字符串创建连接,它会起作用
using(var connection=new ConnectionMultiplexer.Connect("10.1.3.11:26379,10.1.3.12:26379,10.1.3.13:26379,serviceName=redis-primary,AllowAdmin=true"))
{
// do stuff
}
您必须在连接字符串中指定 ServiceName
才能连接到 Sentinel。
他们引入了一种新方法 SentinelConnect
,该方法不适用于相同的连接字符串!
如果您使用的 StackExchange.Redis.Extensions.Core
库没有带连接字符串的构造函数,您应该创建一个 RedisConfiguration 的空实例,并在 ConnectionPoolManager 实现中通过 ConnectionString 进行连接。