在redis中,声明不应在生产中使用keys命令,因为它在执行时阻塞其他进程,所以最好对具有一定批处理大小的所有键使用扫描迭代。我在文档中看到redis使用散列索引,所以我假设它不能用于范围查询,如扫描和键。
但是我们的系统是以这样的方式完成的,我们需要广泛地使用扫描。可以吗?它能显著降低哈希查询的性能吗?
发布于 2021-01-12 16:06:14
注Redis是单线程,所以任何操作都可以阻止另一个操作。
(它试图通过将读取和写入I/O套接字的时间分配给其他线程,从而在最近发布中解决这个问题,因此Redis进程可以将更多的周期用于操作、存储和检索数据,从而提高总体性能。不过,您需要自己在自己的用例上进行基准测试。)
我在文档中看到redis使用散列索引,所以我假设它不能用于范围查询
Redis中有多个数据类型,如果使用排序集,zrange将返回指定的元素范围。
可以吗?它能显著降低哈希查询的性能吗?
不确定用例,但我认为scan用于匹配更好,例如在Java中
KeyScanCursor<String> cursor = sync.scan(ScanArgs.Builder.limit(1000).match(wildMatch));是的,扫描可能非常慢,每个光标只返回很少的键。因此,正如上面的示例所示,最好设置一个最大密钥号,以避免花费很长时间和/或触发请求资源限制。
因此,你可以做这样的事情
while (!cursor.isFinished() && fetchedResult.size() < keyNumber)
{
fetchedResult.addAll(cursor.getKeys());
cursor = sync.scan(cursor, ScanArgs.Builder.matches(wildMatch));
}https://softwareengineering.stackexchange.com/questions/420959
复制相似问题