问题标签 [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 投票
1 回答
1643 浏览

laravel - localhost 没有在 laravel 5.2(socket.io) 中发送任何数据

我已经在 laravel 5.2 中安装了 node.js、socket.io、predis、ioredis

当我跑步时

节点socket.js

在 gitbash 中,没有返回任何内容。

在 localhost:3000,首先加载一段时间,然后显示 localhost没有发送任何数据错误。(应该显示完成)

socket.js 文件:http ://laravel.io/bin/OeGxv

路线文件: http: //laravel.io/bin/d9PvY

package.json: http: //laravel.io/bin/Kk5mB

0 投票
1 回答
1375 浏览

amazon-web-services - EC2 t2.micro 上的 Redis Cluster 3.2.0(无 Elasticache)

经过一番折腾,我陷入了僵局。我正在尝试在单个 t2.micro 上设置一个由 3 个主节点和 3 个从属节点组成的 redis 集群。我在本地主机上的设置效果很好,但是当我尝试在 EC2 上运行它时,我遇到了一个奇怪的问题,我的客户端(在使用 ioredis 的单独 t2.micro 上)似乎可以找到并连接,但随后会反复抛出许多错误,例如“ioredis :连接错误:错误:连接 ECONNREFUSED”如果我的客户端位于 http 中。如果我切换到 https,我会收到其他不同的超时错误和“手动关闭”错误(尝试在集群选项中设置 TLS 标志无济于事)。


TL;博士

想法??为什么我无法使用 redis-trib 创建具有 publicIP(而不是 127.0.0.1)的集群?这似乎可以解决我的问题,或者我在这里缺少一些明显的东西,比如防火墙?...

如果您正在阅读本文并在使用 redis 时遇到困难,那么下面的要点列表可以很好地总结 google 和 stackoverflow 的首页上几乎所有提出的 redis 解决方案。好好利用它们!

在阅读了几个类似的主题后,我发现他们都没有解决这个问题。这是我尝试过的;

  1. 检查我的 EC2 安全组以确保在我的 redis t2.micro 和客户端 t2.micro 之间打开了正确的端口。确保 redis 端口+10,000(用于总线)也已打开。
  2. 检查了我的 AWS vpc、互联网网关、子网和 acl,以确保流量可以在两个实例之间流动
  3. 运行了一些 netstat,看起来我可以连接到正确的端口,并且 redis 正在侦听正确的端口
  4. 在每个节点的 redis.conf 文件中确保保护模式(设置为 no)、绑定(注释掉)和密码字段(注释掉)不会阻止通信。起初,这是问题的一部分。有一次,我将它们全部关闭,但最终仍然出现相同的错误。
  5. 我删除了所有旧的 aof、dump.rdb、node.conf 文件并启动了新实例。我确保每个节点都有自己的文件夹(不共享 node.conf 文件)。
  6. 我尝试使用环回 127.0.0.1 连接 redis 集群,如下所示:

./redis-trib.rb 创建 --replicas 1 127.0.0.1:30010 127.0.0.1:30011 127.0.0.1:30012 127.0.0.1:30013 127.0.0.1:30014 127.0.0.1:30015

并且仍然有来自客户的错误。于是又试了redis t2.micro的aws公网主机地址,然后公网IP,再私网IP。当我启动节点(使用 ps -ef 确保它们以守护程序模式运行)然后尝试使用公共 IP 的 ./redis-trib create --replicas 1 publicIP:30010 ..etc 时,它看起来会创建集群但随后挂在“>>>创建集群”,直到它失败并说它无法连接到第一个节点。它不会让我使用 publicIP 而不是 127.0.0.1 创建集群(我怀疑这是我的客户端无法连接的问题)。似乎其他人已经成功连接它,但在这种情况下没有(我也尝试从我的客户端运行 redis-trib,它会连接并在 redis t2 上生成 aof 和 node.conf。

  1. 一旦我让集群在 127.0.0.1 下启动并运行,节点就会进行通信,redis-cli 会将 PONG 返回给我的 ping,但要设置一个密钥,它会给出“(错误)MOVED 16164 127.0.0.1:30012”,对于 '得到'。所以我尝试通过发送“集群会议”来手动设置公共IP,如下例所示:redis-cli redirected to 127.0.0.1

还是不行。当我设置满足时,一些 127.0.0.1 仍然存在,或者我用 publicIP 设置的那些似乎在我完成所有节点的运行时切换回来。

唯一需要考虑的是 AWS 是否在某处阻塞了端口。我尝试打开两个 t2.micro 实例的所有端口,并向任何人开放它们,但它仍然无法正常工作。我考虑过在 EC2 实例上查看 iptables,但鉴于存在安全组(而且我没有过多地使用 iptables),因此不应设置它们。我以为这需要我一个小时,但现在我仍然坐在这里摸不着头脑。

一些可能有用的代码:

集群代码:

30010 节点.conf

客户端错误:sudo DEBUG=ioredis:* node app.js

SSH 到 redis t2.micro 和 netstat。似乎正在侦听正确的端口(30010-30015

SSH 到客户端 t2.micro 并从 redis 远程服务器远程调用集群节点,它返回正确的环回设置:

-------------------------------------------------- -----

想法??为什么我无法使用 redis-trib 创建具有 publicIP(而不是 127.0.0.1)的集群?这似乎可以解决我的问题,或者我在这里缺少一些明显的东西,比如防火墙......

................................ 更新

我在 redis 服务器上本地运行了 redis-trib.rb check,它显示一切都很好:

但是,当我使用 redis publicIP 从我的客户端在不同的实例上运行它时,我得到:

所以看起来我需要切换 127.0.0.1。如果我使用 publicIP:port,它允许我从客户端连接到单个节点,但是当它尝试查找其他节点时,它必须认为它们是本地节点

更新 2:似乎这是我的问题,但我已经仔细检查了 6 个 redis.conf 文件中的任何一个都没有设置密码: 使用 redis-trib.rb 创建集群时出现连接错误?

Update3:这篇文章非常接近,但我不明白他的解决方案:src/redis-trib.rb create 127.0.0.1:6379 127.0.0.1:6380 h2:p1 h2:p2 h3:p1 h3:p2

具体为什么他在 h2:p1 h2:p2 h3:p1 h3:p2 之后声明主机和端口


更新4:

看来这可能是 AWS t2.micro 实例的问题。我已向 AWS Support 发送请求: https ://forums.aws.amazon.com/thread.jspa?messageID=647509


已解决:它在客户端和 redis-trib create 命令中都使用了私有 IP 地址。我曾在客户端配置中尝试过私有 IP,但错误地认为我已经尝试过使用它的 redis-trib。

对于其他人:课程:使用 redis EC2 实例的私有 IP。感谢这个视频帮助我了解:https: //www.youtube.com/watch?v=s4YpCA2Y_ -Q

0 投票
0 回答
367 浏览

node.js - 测试 hset 和 hget 时使用 ioredis 或 node_redis 的奇怪行为

希望有人可以对此有所了解。我一辈子都找不到问题所在。

问题:

我正在尝试使用 hset 在一个文件中向 Redis 添加一个值,并使用hget另一个文件中获取该值。在测试用例中最终发生的是值已设置但hget返回 null ,就好像那里什么都没有。

试图:

当我在同一个文件中设置后立即尝试获取该值时,会发生真正奇怪的部分。它实际上正常工作!看一下这个...

你可以看到路线很简单......

如果我在我的测试用例中将那个 hget 插入到我的hset下方,那么这个值就会被完美地检索到。有没有人对如何解决这个问题有任何想法?

笔记:

在任何人建议之前,我已经监听了连接的事件,这并不重要,因为我可以直接在hset下方获取值并且它可以工作。这个问题也存在于一个承诺的node_redis安装中。

谢谢!

0 投票
1 回答
465 浏览

node.js - 如何在 IOREDIS 中发送 ZRank

我是 Nodejs 的新手,我正在使用ioredis将 redis 命令发送到我的集群。

除了基本的“get”和“set”命令外,我找不到任何关于如何在 ioredis 中使用zrank 命令的ioredis 示例。

我知道 ioredis 实现了它,但参数和回调对我来说是个谜。

如果问题可能重复,谢谢和抱歉。

0 投票
1 回答
70 浏览

node.js - Nodejs关闭问题

我在我的节点 Web 应用程序中使用与 RedisStore 的快速会话。

NodeJs 版本:4.2.4 JS:Es6

“express”:“^4.13.3”,“express-session”:“ https://github.com/echorohit/session/tarball/1d22749aa46280a24a4ee3a993ba0772e6e1e2df ”,“ioredis”:“^1.13.0”,“connect-redis” ": "^3.0.1",

我观察到会话有时会在用户之间混淆。我正在使用 newrelic 洞察力来记录一些指标,所以我也用它来调试问题。

这是我的发现。

来自 express-session 的 store.js 的代码片段

CHECKPOINT 1。 req.sessionID 是正确的,但在CHECKPOINT 2很奇怪。 req.sessionID 被打印用于在新的 relic 日志中同时执行的其他请求。

我确信这是会话混淆的原因。但无法进一步调试以找到它的根本原因。请帮助我提示如何找到问题的根本原因。不确定这是否真的是封闭范围问题。

0 投票
1 回答
2351 浏览

javascript - 我应该保持我的 redis 连接持久吗?

我正在考虑使用 redis 作为我的 api 应用程序的键值存储。该 api 基本上只需要一个客户端连接到 redis。我不确定我应该永远保持连接打开吗?还是应该只在需要从 redis 设置或获取值时才打开连接?

人们可能会认为打开连接是一项昂贵的操作,因此从这个意义上说,人们应该更喜欢永久连接。另一方面,保持连接始终打开并不像仅在需要时才打开它那样安全。而且,长时间打开的连接打开可能会导致超时。如果由于某种原因连接失败,redis 是否会尝试重新连接?redis 处理长时间打开的连接有多好?任何帮助表示赞赏!

0 投票
0 回答
996 浏览

node.js - Redis Cluster和node ioredis:连接远程redis集群进行开发

我无法让我的应用程序在本地连接到远程 redis 集群。使用单个节点/连接非常简单:

ssh -f -N -L6379:localhost:6379 user@{{ remote_ip }}

然后可以通过本地6379端口直接连接redis。

但同样不适用于多节点集群设置。我尝试使用上述代码行为每个节点转发每个端口,6379, 6380, 6381, etc.但无法建立集群连接。我认为这是因为集群节点配置必须引用远程服务器的实际私有 IP,因此我的本地端口无法连接在一起。

这就是我连接到redis的方式:

ENV.MARKET_REDIS_HOST在 dev 中设置为 localhost(不起作用),在 prod 中设置为实际的私有 ip(起作用)

0 投票
1 回答
32 浏览

node.js - 以交互方式执行操作,它可以工作。以编程方式执行相同的操作,但它失败了。Redis、heroku、节点

这是我的互动环节。它工作得很好。

这是我的代码,以及它的执行方式。

我会说这两个应该产生相同的结果,但他们没有。我正在使用使用npm install redis. 我知道还有其他客户。

有人知道发生了什么吗?


我将节点客户端从 node_redis 更改为 ioredis。从 更改npm install redisnpm install ioredis。现在错误消息提供了更多信息。

仍然没有解决问题。

0 投票
1 回答
876 浏览

node.js - node.js从redis集群获取数据,使用ioredis,zrange方法不返回正确数量的数据

我使用这个:redisClient.zrange(key, 1, 1)并尝试通过该键获取所有数据,但有时列表中的某些数据丢失,但是当我签入redis数据时,c#客户端也一切正常。有任何想法吗?

0 投票
1 回答
21035 浏览

node.js - Nodejs IOREDIS:如何设置密钥的过期时间?

我正在使用下面给出的代码连接到 Redis 哨兵

我正在使用以下代码设置键的值:

您能否通过提供解决方案来为键值设置过期时间来帮助我,例如 12 小时