问题描述
我是 Redis 的新手,也是我担任软件工程师的第一年,所以提前感谢您的帮助。
我正在尝试尽快从特定分区中的数据库中取出所有键。我知道有两种方法可以做到这一点。
选项 1 几乎立即返回键,但我不知道如何使用类似 consumersPattern
的东西组合 nonConsumersPattern
和 "{2}.Keys.*"
,类似于我为选项 2 所做的. 如果我尝试 "{2}.Keys.*"
,我会收到一条错误消息,指出该值为空。如您所见,consumersPattern
+ nonConsumersPattern
计数为 844,因此显然没有查询键(与选项 1 中的计数相比)。我想要所有的密钥,而不仅仅是消费者和非消费者。
如果我理解这是如何工作的,那么 {2}
就是我要查询的分区。我正在尝试获取分区上的所有键,我认为这就是选项 2 正在执行的操作。但是,选项 2 需要很长时间才能运行(在 30-50 秒之间,具体取决于我查询的分区)。
如何在不牺牲速度的情况下获取分区上的所有密钥?
下面是图中用到的代码:
private static List<RedisKey> GetKeysFromredis(ConnectionMultiplexer connection,EndPoint endPoint,string keyPattern)
{
IDatabase redisCache = connection.GetDatabase();
var consumersPattern = "{2}.Keys.Consumers";
var nonConsumersPattern = "{2}.Keys.NonConsumers";
var redisKeysConsumers = JsonConvert.DeserializeObject<string[]>(redisCache.StringGet(consumersPattern));
var redisKeysNonConsumers = JsonConvert.DeserializeObject<string[]>(redisCache.StringGet(nonConsumersPattern));
var consumerKeys = redisKeysConsumers.Select(key => (RedisKey)key).ToList();
var nonConsumerKeys = redisKeysNonConsumers.Select(key => (RedisKey)key).ToList();
var totalKeys = consumerKeys.Concat(nonConsumerKeys).ToList().Count;
var keys = connection.GetServer(endPoint).Keys(pattern: keyPattern).ToList();
return keys;
}
再次感谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)