node.js - Redis:哪个更好:SCAN/HSCAN 或 HVALS。何时使用它们
问题描述
从性能的角度来看,什么更好?如何聪明地使用它们?
我在 redis 中有哈希实体。一个哈希名称有大约 150K 键值对(这是一项要求)并且我有一个处理响应等的 NodeJS 应用程序。将使用诸如“node-redis-scan”eachScan()、“redis”hvals() 之类的库
我可以用:
“redis”hvals()。REDIS COMMAND:
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 一次。
推荐阅读
- c# - 如何为具有两个参数的Controller方法编写单元测试以及需要测试哪些场景?
- csv - 如何从 Gnuplot 中的 CSV 文件中绘制曲线?
- python - 即使在 Python 3.6 中安装 Xlrd 后也会出错
- ruby-on-rails - Ruby on Rails 5 随机 NameError:控制台中命名空间模型上的未初始化常量
- c# - 替换时区
- sql - 查看应用程序发送的 SQL 语句历史记录?
- vba - 宏结束,内容仍被选中
- javascript - 无法将 obj 实例化为文件并在另一个文件中使用它
- python - 如何确定数据帧与 Nan 的相关性?
- angular - 角度路由在组件中不起作用