尝试使用booksleeve在Redis中运行以下内容时。
using (var conn = new RedisConnection(server, port, -1, password))
{
var result = conn.Server.FlushDb(0);
result.Wait();
}
我收到错误说:
除非使用创建连接,否则此命令不可用 admin-commands enabled“
我不确定如何以管理员身份执行命令?我是否需要在具有管理员权限的数据库中创建一个a / c并使用该权限登录?
答案 0 :(得分:59)
更新了StackExchange.Redis的答案:
var conn = ConnectionMultiplexer.Connect("localhost,allowAdmin=true");
另请注意,此处创建的对象应按应用程序创建一次,并按照Marc分享为全局单例:
因为ConnectionMultiplexer做了很多,所以它被设计为 在呼叫者之间共享和重用。你不应该创建一个 ConnectionMultiplexer每个操作。它完全是线程安全的并且准备就绪 用于此用途。
答案 1 :(得分:24)
基本上,在常规操作中不需要的危险命令,但如果使用不当会导致很多问题(即在tsql中相当于drop database
,因为你的例子是FlushDb
)受到“是的,我打算这样做......”标志的保护:
using (var conn = new RedisConnection(server, port, -1, password,
allowAdmin: true)) <==== here
我会改进错误信息,使其清晰明确。
答案 2 :(得分:1)
对于那些像我一样面临错误的人:
<块引用>StackExchange.Redis.RedisCommandException:这个操作不是 除非启用管理员模式,否则可用:ROLE
在使用 Sentinel 连接将 StackExchange.Redis 升级到 2.2.4 版后:这是一个 known bug,解决方法是将您的客户端降级或将 allowAdmin=true
添加到连接字符串并等待修复。
答案 3 :(得分:0)
您还可以在创建多路复用器时在C#中进行设置-设置AllowAdmin
= true
private ConnectionMultiplexer GetConnectionMultiplexer()
{
var options = ConfigurationOptions.Parse("localhost:6379");
options.ConnectRetry = 5;
options.AllowAdmin = true;
return ConnectionMultiplexer.Connect(options);
}