如何从Redis分区中获取所有键?

问题描述

我是 Redis 的新手,也是我担任软件工程师的第一年,所以提前感谢您的帮助。

我正在尝试尽快从特定分区中的数据库中取出所有键。我知道有两种方法可以做到这一点。

这是帮助解释我正在尝试做和理解的代码图片

enter image description here

选项 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 (将#修改为@)