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

Jus*_*mes 28 redis booksleeve

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

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

我收到一个错误说:

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

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

Tod*_*ier 65

StackExchange.Redis的更新答案:

var conn = ConnectionMultiplexer.Connect("localhost,allowAdmin=true");
Run Code Online (Sandbox Code Playgroud)

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

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


Mar*_*ell 26

基本上,你在日常操作中不需要的危险命令,但如果使用不当会导致很多问题(即drop databasetsql中的等价物,因为你的例子是FlushDb),受到"是的,我打算这样做"的保护......"旗帜:

using (var conn = new RedisConnection(server, port, -1, password,
          allowAdmin: true)) <==== here
Run Code Online (Sandbox Code Playgroud)

我将改进错误消息,使其非常明确和明确.


Dav*_*ney 9

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

    private ConnectionMultiplexer GetConnectionMultiplexer()
    {
        var options = ConfigurationOptions.Parse("localhost:6379");
        options.ConnectRetry = 5;
        options.AllowAdmin = true;
        return ConnectionMultiplexer.Connect(options);
    }
Run Code Online (Sandbox Code Playgroud)