redis扫描-优化可能性?

az31mfrm  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(235)

我对redis非常陌生,最初使用键来迭代我的数据集,但从我在redis最坏实践文档中看到的情况来看,实际上并不推荐使用它-尤其是在包含许多键的较大数据集中,因为键迭代整个数据集,阻塞了很长时间,而scan则遍历数据集中的数据块,从而只在比键更少的时间内阻塞。如果这一点理解正确,我想知道是否有任何方法可以优化扫描迭代,这样它就可以从给定的点迭代,而不是随机迭代(比如说)10000个数据。
例子:

a1
a2
a3
b1 < --- start iterating from here instead of from a1
b2
b3

这样可以节省“我们”很多表演?

fquxozlt

fquxozlt1#

scan命令遍历按哈希值排序的数据库哈希Map表。
您可以用cursor参数控制扫描从何处开始,但在hash-ordered hashmap表中最多可以控制扫描从何处开始。参见redis'scan':如何在可能匹配的键之间保持平衡,并确保在合理的时间内得到最终结果?。
但是这是相当不切实际的,因为密钥的散列可以被认为是密钥本身的伪随机。这并不像他们遵循一个字典顺序或任何逻辑有用的任何种类的顺序。散列的目的就是在哈希表中均匀地分布键。
因此,即使尝试scan 0 match b1*,实现仍然需要遍历哈希表的所有条目以进行完全扫描,因此需要多次调用scan,直到返回的游标返回到0为止。

相关问题