StackExchange.Redis如何查询所有数据库密钥

Jua*_*anK 3 stackexchange.redis

我正在尝试找到一些遵循模式的键,但我需要所有相关的键,而不仅仅是特定服务器中的键.

到目前为止,我正在尝试使用文档示例访问特定服务器,但它不起作用.

        var connection = ConnectionMultiplexer.Connect(new ConfigurationOptions
        {
            EndPoints = { { DemoSettings.CustomerRedisCache.Url, DemoSettings.CustomerRedisCache.Port } },
            Password = DemoSettings.CustomerRedisCache.Password
        });

        var server = connection.GetServer(host: DemoSettings.CustomerRedisCache.Url, 
                                          port: DemoSettings.CustomerRedisCache.Port);
        var cadena = "cust:" + data.SearchString.Replace(' ', ':')+"*";
        var valores = server.Keys(pattern: cadena);
Run Code Online (Sandbox Code Playgroud)

由于超时,最后一行总是失败:S

我会感激任何帮助.

Mar*_*ell 5

首先,你使用的是redis服务器版本?可用的服务器命令因服务器而异,并且在2.8之前的版本上KEYS必须使用该SCAN命令而不是命令.KEYS众所周知,该命令会导致严重的性能问题,并且永远不应该在生产中使用,除非是奴隶.如果你使用<2.8,是的,我希望KEYS会导致超时.

但是,最终两者SCANKEYS建议您不要以预期的方式使用redis.您不应该发现自己需要将这些命令用于常规操作.常规应该使用它们的唯一工具是管理/数据探索工具.理想情况下,他们应该以奴隶为目标,而不是主人.

通常有替代办法做任何事情,人们往往希望SCANKEYS对-例如,通过在特定的群组存储在一组键(SADD等)