首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ServiceStack.Redis SearchKeys

ServiceStack.Redis SearchKeys
EN

Stack Overflow用户
提问于 2014-04-01 14:59:06
回答 3查看 2.4K关注 0票数 1

我正在C#上使用C#客户端。

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

现在,我使用redis类型的客户机作为client = redis.As<String>。我想检索type2的所有密钥。我使用的模式如下:

代码语言:javascript
复制
var keys = client.SearchKeys("b::RecID::*");

但是取回钥匙需要很长时间(大约3-5分钟)。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-01 20:38:47

您应该努力工作,以避免需要扫描键空间。KYES实际上是一个服务器阻止器,但是即使您有可用的SCAN:不要这样做。现在,您可以选择将您在某个集合中可用的东西的密钥保存在某个地方,但是没有SRANGE等等,在2中,您必须使用SMEMBERS,它仍然需要返回几百万个记录,但至少它们都是可用的。在以后的服务器版本中,您可以访问SCAN (think:KEYS)和SSCAN (think:SMEMBERS),但最终您只需要数以百万计的行,这一点从来都不是免费的。

如果可能的话,您可以通过使用主/从对并在从服务器上运行昂贵的操作来减轻这种影响。至少其他客户端可以在您杀死服务器时做一些事情。

票数 6
EN

Stack Overflow用户

发布于 2014-04-01 15:05:40

Redis中的key命令很慢(嗯,不是很慢,而是很费时)。它还阻止服务器在运行时接受任何其他命令。

如果您真的想迭代所有的键,请看一看扫描命令--尽管我对此不了解ServiceStack。

票数 0
EN

Stack Overflow用户

发布于 2015-01-16 01:20:14

您可以使用SCAN命令,进行循环搜索,其中每个搜索仅限于较小数量的键。有关完整的示例,请参阅本文:http://blog.bossma.cn/csharp/nservicekit-redis-support-scan-solution/

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22789627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档