35

当尝试使用 bookleeve 在 Redis 中运行以下命令时。

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

我收到一条错误消息:

除非在启用管理命令的情况下创建连接,否则此命令不可用”

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

4

4 回答 4

75

StackExchange.Redis的更新答案:

var conn = ConnectionMultiplexer.Connect("localhost,allowAdmin=true");

另请注意,此处创建的对象应为每个应用程序创建一次,并按Marc共享为全局单例:

因为 ConnectionMultiplexer 做了很多事情,所以它被设计为在调用者之间共享和重用。您不应该为每个操作创建一个 ConnectionMultiplexer。它是完全线程安全的,可以使用。

于 2014-07-10T21:12:12.983 回答
33

基本上,您在日常操作中不需要的危险命令,但如果使用不当可能会导致很多问题(即相当于drop database在 tsql 中,因为您的示例是FlushDb)受到“是的,我打算这样做”的保护...“ 旗帜:

using (var conn = new RedisConnection(server, port, -1, password,
          allowAdmin: true)) <==== here

我将改进错误消息以使其非常清晰和明确。

于 2013-08-10T19:16:29.047 回答
4

您也可以在创建多路复用器时在 C# 中设置它 - set AllowAdmin= true

    private ConnectionMultiplexer GetConnectionMultiplexer()
    {
        var options = ConfigurationOptions.Parse("localhost:6379");
        options.ConnectRetry = 5;
        options.AllowAdmin = true;
        return ConnectionMultiplexer.Connect(options);
    }
于 2018-12-18T07:55:00.660 回答
3

对于那些像我一样面临错误的人:

StackExchange.Redis.RedisCommandException:除非启用管理员模式,否则此操作不可用:ROLE

使用 Sentinel 连接将 StackExchange.Redis 升级到 2.2.4 版后:这是一个已知错误,解决方法是降级客户端或添加allowAdmin=true到连接字符串并等待修复。

从 2.2.50 公开发行版开始,该问题已得到修复。

于 2021-01-09T13:01:57.137 回答