如何解决如何从Redis分区中获取所有键?
我是 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 举报,一经查实,本站将立刻删除。