问题标签 [ioredis]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3504 浏览

docker - Redis Windows 错误:连接 ECONNREFUSED 127.0.0.1:6379 但应用程序正在运行

我的 nodejs-redis-docker-compose 应用程序有问题。该应用程序正常运行了几次。但后来,它开始给我以下错误。我正在使用redis-server v3.2.100 docker 18.09.1 build 4c52b90. 我卸载了 docker 和 redis 并重新安装了它们,但我仍然遇到同样的问题。这是错误。

nodejs 应用程序启动时会引发错误,但在应用程序启动并运行时它已连接到 redis 服务器。


Redis 控制台日志


netstat -a -n -o在控制台上运行,这是相关部分(我相信)。

以下是我的文件。


./Dockerfile


./docker-compose.yml


./redisClient.js


./app.js

我没有在服务器上调用 .listen(...) 因为它被导出到另一个文件(index.js)。

谢谢

0 投票
1 回答
4226 浏览

node.js - 使用 ioredis scanStream() 扫描所有 Redis 键时出现问题

我正在尝试在 NodeJS 应用程序中将所有 Redis 密钥与 MongoDB 同步。

我使用 ioredis 作为 NodeJS Redis 客户端,并尝试通过使用scanStream() 函数来实现上述目的。这个函数被认为是一种使用流扫描光标中所有键的更简单方法。

这是我用来尝试扫描所有键的代码:

但是我收到以下错误:

api_1 | 所有键都已访问 proxy_1 | 172.18.0.1 - - [22/Jan/2019:12:52:06 +0000] "GET /api/syncredis HTTP/1.1" 200 4 "-" "PostmanRuntime/7.6.0" "-" api_1 | ::ffff:172.18.0.6 - - [22/Jan/2019:12:52:06 +0000] "GET /api/syncredis HTTP/1.1" 200 4 "-" "PostmanRuntime/7.6.0" api_1 | SyntaxError: 位置 0 api_1 处 JSON 中的意外标记 l | 在 JSON.parse() api_1 | 在 ScanStream.stream.on (/usr/src/app/routes/testRoute.js:428:32) api_1 | 在 process.internalTickCallback (internal/process/next_tick.js:77:7) api_1 | 错误 [ERR_HTTP_HEADERS_SENT]:在将标头发送到客户端后无法设置标头

0 投票
0 回答
188 浏览

javascript - 如何更新 redis 中的多键哈希项?

我有一个集合Providers。每个提供者可以有多个Orders.

我需要在redis中保存与json数组中每个提供者相关的订单ID。

一种可能的解决方案是使用 HSET。

或在 javascript 中:

1提供者 ID 和'1234'orderId在哪里

但是,如果我需要向同一个提供商添加新订单,我需要获取当前订单 ID 数组并添加新订单 ID。

像这样的东西:

这是做类似事情的最好方法吗?

我考虑过的另一个选择是为每个提供者创建新密钥并使用 SADD。

1提供者 ID 和'1234'orderId在哪里

但是,这会创建很多密钥。每个提供商一个。

0 投票
1 回答
690 浏览

node.js - 调用自定义 Redis 命令/模块后,IORedis 或 (node_redis) 回调未触发

在 nodejs 应用程序的 websocket 消息事件中使用 redis 客户端(ioredis 或 node_redis)时,不会立即触发任何命令的回调。(该操作确实发生在 redis 服务器上)

奇怪的是,第一个命令的回调将在我发送第二条消息后触发,而第二个命令的回调将在我发送第三条消息后触发。

尽管在应用程序的其他部分,甚至在如下所示的 on 连接中,redis 命令仍按预期工作。

更新:

我错了。奇怪的回调行为的原因是我的一个自定义 Redis 模块没有返回回复。这似乎导致此调用之后的所有回调似乎都有某种一步延迟。

0 投票
1 回答
139 浏览

node.js - 使用 ioredis 在单个原子操作中发送多个 BITOP

我正在使用带有 node.js 的 ioredis 客户端(@4.6.2),我需要做很多位操作(它们不依赖于彼此)。像这样的东西:

通过其他一些操作(例如setbit),我可以使用管道对象及其exec()函数以原子方式运行它们:

但我找不到任何pipeline.bitop()功能pipeline.send_command()

有没有办法BITOP在原子操作中发送这些命令?谢谢

0 投票
0 回答
51 浏览

node.js - 使用redis列表时nodejs上的偶尔错误

我有一个每 5 分钟运行一次 NodeJS 脚本的 cron,当我检查错误日志时,有时它遇到了 Redis 错误:

我在 Redis 上使用列表数据结构以数组形式存储值,当我尝试从列表中弹出所有数据时会发生此错误,我使用这样的循环来执行此操作:

它运行良好,但令我恼火的是所有这些 redis 错误,这些错误Error: Unknown command LLEN偶尔会发生并且不会影响应用程序的功能。

0 投票
1 回答
813 浏览

javascript - 将 JSON 流式传输到 Redis

我有一个大的 JSON 文件,我想将它存储在 Redis 中。问题是当我解析它时,Node.Js 中的内存不足

我将堆内存从 1.39GB 扩展至 4GB,它仍在发生,我相信我没有正确执行。

通过大量搜索,我发现流媒体是我最好的选择。问题是我对流媒体不是很流利,我不确定即使这样也能解决我的问题

我读了很多,有很多零散的信息。我想问你是否认为这是否平易近人或者这是否正确?

我可以将 JSON 对象流式传输到 Redis 吗?我是否必须对其进行 Staingifiying 或它会自动进行?我应该逐块字符串化我的 json 块吗?或者流到redis最终会成为一个字符串?

我正在使用 ioRedis 客户端与 Redis 进行交互。

我提前感谢您的帮助。

0 投票
1 回答
211 浏览

javascript - nodeJS - ioredis NPM 模块 - 订阅者事件有问题

这是我一直用来测试的代码,它会产生以下控制台输出:

预期输出:

sub.on('subscribe') 事件似乎没有触发。

0 投票
2 回答
4699 浏览

node.js - 任何redis调用的ioredis发送命令的默认超时是多少

我正在将 ioredis 与节点应用程序一起使用,由于集群中的一些问题,我开始得到:

集群重定向过多。最后一个错误:错误:连接已关闭。

因此,我所有的 redis 调用都失败了,并且在很长一段时间后,从 1 秒到 130 秒不等。

ioredis 库是否有任何默认超时,用于在向 redis 服务器发送执行命令后断言调用?

向redis服务器发送命令的失败时间更长,范围为100秒,是因为集群故障导致redis的队列大小高吗?

示例代码:

这里 logger.error(bucketName, 'getData', err.message, userKey, that.currentService, responseTime);

开始给出 1061ms 到 109939ms 范围内的响应时间。

请提供一些输入。

0 投票
1 回答
1691 浏览

amazon-web-services - 来自 ECS 的 AWS 上的 Redis 命令永远挂起

我有使用 Fargate 和 ElastiCache Redis 实例管理的 ECS 容器。ECS 和 Redis 都部署在私有 VPC 中。我想要的是从 ECS 容器连接到 Redis。所有子网和安全组似乎都配置正确,在发送 auth 命令后有“就绪”事件,但是所有其他命令(例如信息)永远挂起。ioredis这是在容器中运行的代码(Node.js with ):

日志输出为:

上面的行来自 IoRedis 调试信息。似乎它正确连接并进行了身份验证,但进一步的命令永远挂起,永远不会返回响应(既不是成功也不是错误)。这里可能有什么问题?


还使用打包的“redis”(而不是“ioredis”)对其进行了测试:

同样的问题 - 命令回调永远不会被调用:

在此处输入图像描述