首页 > 解决方案 > Redis:哪个更好:SCAN/HSCAN 或 HVALS。何时使用它们

问题描述

从性能的角度来看,什么更好?如何聪明地使用它们?

我在 redis 中有哈希实体。一个哈希名称有大约 150K 键值对(这是一项要求)并且我有一个处理响应等的 NodeJS 应用程序。将使用诸如“node-redis-scan”eachScan()、“redis”hvals() 之类的库

我可以用:

  1. “redis”hvals()。REDIS COMMAND:hvals 'my hash name' 一次调用即可获得 150K 值

  2. 带有选项的“node-redis-scan” eachScan()。REDIS 命令:hscan 'my hash name' 0 MATCH * COUNT 15000 将使用游标直到其值为 0 并过滤结果以仅在代码级别获取值。

哪个选项更好,什么时候更好?

标签: node.jsperformancehashredisnode-redis

解决方案


恕我直言,除非我清楚地知道哈希图的大小很小,否则我不会使用 HVALS。

为什么 ?与为什么不使用 KEYS 命令的答案相同:如果有很大的响应,它可以阻塞主线程。HSCAN 返回键和值,可能超出您的需要。但是因为它是迭代的,所以它可以扩展答案并且不会长时间阻塞主线程。

我已经用 Java 开发了一个小库(在 github 中搜索 InterruptedJedisLocks),我已经使用了很多次 HSCAN 并且没有使用过 HVALS 和 HKEYS 一次。


推荐阅读