从性能角度来看,什么更好?如何巧妙地使用它们?
我在redis中有哈希实体。一个哈希名称大约有 150K 个键值对(这是一项要求) 我有一个 NodeJS 应用程序来处理响应等。 将使用像“node-redis-scan”eachScan()、“redis”hvals()这样的库
我可以使用:
“redis”hvals()。 REDIS 命令:
hvals 'my hash name'
一次调用即可获取 150K 值
“node-redis-scan”eachScan() 带有选项。 REDIS 命令:
hscan 'my hash name' 0 MATCH * COUNT 15000
将使用光标直到其值为 0 并过滤结果以仅在代码级别获取值。
哪种选择更好以及什么时候更好?
恕我直言,除非我清楚地知道哈希图的大小很小,否则我不会使用 HVALS。
为什么?与为什么不使用 KEYS 命令的答案相同:如果有很大的响应,它会阻塞主线程。 HSCAN 返回键和值,可能比您需要的更多。但因为它是交互式的,所以它可以扩展答案并且不会长时间阻塞主线程。
我用Java开发了一个小库(在github中搜索InterruptedJedisLocks),并且我使用过多次HSCAN,并且没有使用过HVALS或HKEYS一次。