1

ServiceStack.Redis在 C# 上使用客户端。

我使用以下模式a::name::1添加了大约 500 万条type1记录,并使用模式b::RecId::1添加了1100 万条type2记录。

现在我使用 redis 类型的客户端作为client = redis.As<String>. 我想检索type2的所有键。我正在使用以下模式:

var keys = client.SearchKeys("b::RecID::*");

但是检索密钥需要很长时间(大约 3-5 分钟)。

有没有更快更有效的方法来做到这一点?

4

3 回答 3

6

您应该努力避免扫描键空间的需要。KYES字面上是一个服务器停止器,但即使你SCAN有空:不要那样做。现在,您可以选择将您可用的东西的密钥保存在某个集合中,但没有SRANGEetc - 在 2 中。您必须使用SMEMBERS,它仍然需要返回几百万条记录 - 但在至少它们都将可用。在以后的服务器版本中,您可以访问SCAN(think: KEYS) 和SSCAN(think: SMEMBERS),但最终您只会遇到需要数百万行的问题,而这些行永远不会免费。

如果可能,您可以通过使用主/从对并在从属上运行昂贵的操作来减轻影响。在您终止服务器时,至少其他客户端将能够做某事。

于 2014-04-01T20:38:47.447 回答
0

Redis 中的 keys 命令很慢(嗯,不慢,但很耗时)。它还会阻止您的服务器在运行时接受任何其他命令。

如果您真的想遍历所有键,请查看scan命令-尽管我对此一无所知 ServiceStack

于 2014-04-01T15:05:40.613 回答
-1

您可以使用SCAN命令进行循环搜索,其中每次搜索仅限于较少数量的键。完整的例子可以参考这篇文章:http ://blog.bossma.cn/csharp/nservicekit-redis-support-scan-solution/

于 2015-01-16T01:20:14.127 回答