我正在C#上使用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分钟)。
有没有更快、更有效的方法来做到这一点?
发布于 2014-04-01 20:38:47
您应该努力工作,以避免需要扫描键空间。KYES实际上是一个服务器阻止器,但是即使您有可用的SCAN:不要这样做。现在,您可以选择将您在某个集合中可用的东西的密钥保存在某个地方,但是没有SRANGE等等,在2中,您必须使用SMEMBERS,它仍然需要返回几百万个记录,但至少它们都是可用的。在以后的服务器版本中,您可以访问SCAN (think:KEYS)和SSCAN (think:SMEMBERS),但最终您只需要数以百万计的行,这一点从来都不是免费的。
如果可能的话,您可以通过使用主/从对并在从服务器上运行昂贵的操作来减轻这种影响。至少其他客户端可以在您杀死服务器时做一些事情。
发布于 2014-04-01 15:05:40
Redis中的key命令很慢(嗯,不是很慢,而是很费时)。它还阻止服务器在运行时接受任何其他命令。
如果您真的想迭代所有的键,请看一看扫描命令--尽管我对此不了解ServiceStack。
发布于 2015-01-16 01:20:14
您可以使用SCAN命令,进行循环搜索,其中每个搜索仅限于较小数量的键。有关完整的示例,请参阅本文:http://blog.bossma.cn/csharp/nservicekit-redis-support-scan-solution/
https://stackoverflow.com/questions/22789627
复制相似问题