最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

将数据附加到REDIS哈希的有效方法

网站源码admin17浏览0评论

将数据附加到REDIS哈希的有效方法

将数据附加到REDIS哈希的有效方法

我正在做一些计算,然后将结果发送到REDIS数据库中。

目前,我在单独的GAE实例中处理每块1万个项目的大小的批处理操作(使用NodeJS进行单线程计算),虽然计算速度确实不错,但是执行HSET操作的PUSH操作却花费很长时间,因此会在不同的线程中造成一些延迟(因为REDIS是单线程的-fyi我正在使用Google REDIS Basic实例)。

我做错了什么?如何使它比现在更快地推送(例如分批或以某种方式)?

const key = '123';
for (const [column, value] of results) {
   await this.appendRedisHashValue(key, column, value);
}

public async appendRedisHash(key: string, field: string, value: any) {
        const appendRedisHashAsync = promisify(this.redisClient.hset).bind(this.redisClient);
        return appendRedisHashAsync(key, field, JSON.stringify(value));
}

[如您所见,我只是简单地使用HSET逐一推送每个项目,想知道我们是否可以执行某种SQL transactions并在单个HSET事务中推送例如1万个项目,而不是在每个HSET交易中附加REDIS Hash一次。

每个块(10,000个项目)在保存到REDIS后的大小约为43MB(因此,总共10万个项目将提供430MB)。对于某些体系结构设计,它必须存储在一个REDIS哈希中

当前速度(毫秒),每个作业都在并行的独立线程中运行:

"push": 13608
"finishedAt": "2020-05-08T22:51:26.045Z"

push": 13591,
"finishedAt": "2020-05-08T22:51:29.640Z"

"push": 15738,
"finishedAt": "2020-05-08T22:51:59.177Z"

"push": 21208,
"finishedAt": "2020-05-08T22:51:44.432Z"

"push": 13332,
"finishedAt": "2020-05-08T22:51:28.303Z"

"push": 10598,
"finishedAt": "2020-05-08T22:51:44.455Z"

"push": 27249,
"finishedAt": "2020-05-08T22:51:58.458Z"

"push": 36270,
"finishedAt": "2020-05-08T22:52:00.708Z"

"push": 25106,
"finishedAt": "2020-05-08T22:52:02.234Z"

"push": 12845,
"finishedAt": "2020-05-08T22:52:02.254Z"

任何反馈将不胜感激。

回答如下:

您正在做的是使用单个键/值多次调用hset。由于往返延迟,这很糟糕。

将其设为10k键/值将是10k往返。

发布评论

评论列表(0)

  1. 暂无评论