Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Redis搜索键_Redis_<img Src="//i.stack.imgur.com/WM7S8.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">servicestack.redis - Fatal编程技术网 servicestack.redis,Redis,servicestack.redis" /> servicestack.redis,Redis,servicestack.redis" />

Redis搜索键

Redis搜索键,redis,servicestack.redis,Redis,servicestack.redis,我正在C上使用ServiceStack.Redis客户端 我使用以下模式a::name::1添加了大约500万条type1记录,使用模式b::RecId::1添加了1100万条type2记录 现在我使用redis类型的client作为client=redis.as。我想检索所有类型2的键。我使用以下模式: var keys=client.SearchKeysb::RecID::*; 但取回钥匙大约需要3-5分钟 有没有更快更有效的方法来实现这一点?Redis中的keys命令很慢,不是很慢,而是很

我正在C上使用ServiceStack.Redis客户端

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

现在我使用redis类型的client作为client=redis.as。我想检索所有类型2的键。我使用以下模式:

var keys=client.SearchKeysb::RecID::*; 但取回钥匙大约需要3-5分钟


有没有更快更有效的方法来实现这一点?

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


如果您真的想迭代所有键,请查看该命令-尽管我不知道该命令的ServiceStack

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


如果您真的想迭代所有键,请查看该命令-尽管我不知道该命令的ServiceStack

,但您应该努力避免扫描键空间的需要。KYES实际上是一个服务器拦截器,但即使你有可用的扫描:也不要这样做。现在,你可以选择把你现有的东西的钥匙放在某个地方,但是在2中没有SRANGE等。你必须使用SMEMBERS,它仍然需要返回几百万条记录——但至少它们都是可用的。在以后的服务器版本中,您可以访问SCAN think:KEYS和SSCAN think:SMEMBERS,但最终您会遇到需要数百万行的问题,而这从来都不是免费的


如果可能,您可以通过使用主/从对并在从机上运行昂贵的操作来减轻影响。在您关闭服务器时,至少其他客户端可以执行某些操作。

您应该努力避免需要扫描密钥空间。KYES实际上是一个服务器拦截器,但即使你有可用的扫描:也不要这样做。现在,你可以选择把你现有的东西的钥匙放在某个地方,但是在2中没有SRANGE等。你必须使用SMEMBERS,它仍然需要返回几百万条记录——但至少它们都是可用的。在以后的服务器版本中,您可以访问SCAN think:KEYS和SSCAN think:SMEMBERS,但最终您会遇到需要数百万行的问题,而这从来都不是免费的


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

您可以使用SCAN命令进行循环搜索,其中每个搜索仅限于较小数量的键。有关完整的示例,请参阅本文:

您可以使用SCAN命令进行循环搜索,其中每个搜索仅限于较小数量的键。有关完整的示例,请参阅本文:

我使用的是redis 2.6,此功能可从2.8中获得。感谢如果它有帮助,请不要忘记接受答案:@alphaCoder请不要使用密钥,我想,这就是SearchKey在生产服务器上使用的密钥;这是个杀手。不,真的。不要这样做。我使用的是Redis2.6,这个功能从2.8版开始提供。感谢如果它有帮助,请不要忘记接受答案:@alphaCoder请不要使用密钥,我想,这就是SearchKey在生产服务器上使用的密钥;这是个杀手。不,真的。不要这样做。你为什么说不要使用扫描?这是一个O1操作,设计完全是为了在生产中使用而不是钥匙。因为这些命令允许增量迭代,每次调用只返回少量元素,它们可以在生产环境中使用,而不存在诸如KEYS或smember之类的命令的缺点,这些命令在针对大量的KEYS或smember集合调用时可能会阻塞服务器很长时间甚至几秒钟elements@MrWiggles它当然不像键那样具有破坏性,但这并不意味着您可以随意使用它。你会有很多往返旅行。在大多数系统中,会有很多不相关的键,因此大多数往返都不会返回任何内容。SSCAN最好在此处扫描,将密钥存储在一组中。@MrWiggles扫描仍必须迭代整个密钥空间;它根本不会将不匹配的返回给您;这可能意味着有很多空页或接近空页,因为要成为O1,每次调用只能迭代一个固定的数字。@MrWiggles(来自扫描文档):需要注意的是,匹配筛选器是在从集合中检索元素之后应用的,就在将数据返回到客户端之前。这意味着,如果模式匹配集合中很少的元素,则在大多数迭代中扫描可能不会返回任何元素
内存和内存开销,在这个特定的实例中,假设ID是一个递增的数字,它小于1MB。另外,你为什么说不使用扫描?这是一个O1操作,设计完全是为了在生产中使用而不是钥匙。因为这些命令允许增量迭代,每次调用只返回少量元素,它们可以在生产环境中使用,而不存在诸如KEYS或smember之类的命令的缺点,这些命令在针对大量的KEYS或smember集合调用时可能会阻塞服务器很长时间甚至几秒钟elements@MrWiggles它当然不像键那样具有破坏性,但这并不意味着您可以随意使用它。你会有很多往返旅行。在大多数系统中,会有很多不相关的键,因此大多数往返都不会返回任何内容。SSCAN最好在此处扫描,将密钥存储在一组中。@MrWiggles扫描仍必须迭代整个密钥空间;它根本不会将不匹配的返回给您;这可能意味着有很多空页或接近空页,因为要成为O1,每次调用只能迭代一个固定的数字。@MrWiggles(来自扫描文档):需要注意的是,匹配筛选器是在从集合中检索元素之后应用的,就在将数据返回到客户端之前。这意味着,如果模式匹配集合中很少的元素,则在大多数迭代中扫描可能不会返回任何元素。忽略我的注释和内存开销,在这个特定实例中,假设ID是一个增量数字,则它的附加值小于1MB