微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何从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 举报,一经查实,本站将立刻删除。