除非在启用admin-commands的情况下创建连接,否则此命令不可用

时间:2013-08-10 18:09:55

标签: redis booksleeve

尝试使用booksleeve在Redis中运行以下内容时。

using (var conn = new RedisConnection(server, port, -1, password))
{
    var result = conn.Server.FlushDb(0);
    result.Wait();
}

我收到错误说:

  

除非使用创建连接,否则此命令不可用   admin-commands enabled“

我不确定如何以管理员身份执行命令?我是否需要在具有管理员权限的数据库中创建一个a / c并使用该权限登录?

4 个答案:

答案 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);
    }