问题标签 [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.
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
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 解决方案。好好利用它们!
在阅读了几个类似的主题后,我发现他们都没有解决这个问题。这是我尝试过的;
- 检查我的 EC2 安全组以确保在我的 redis t2.micro 和客户端 t2.micro 之间打开了正确的端口。确保 redis 端口+10,000(用于总线)也已打开。
- 检查了我的 AWS vpc、互联网网关、子网和 acl,以确保流量可以在两个实例之间流动
- 运行了一些 netstat,看起来我可以连接到正确的端口,并且 redis 正在侦听正确的端口
- 在每个节点的 redis.conf 文件中确保保护模式(设置为 no)、绑定(注释掉)和密码字段(注释掉)不会阻止通信。起初,这是问题的一部分。有一次,我将它们全部关闭,但最终仍然出现相同的错误。
- 我删除了所有旧的 aof、dump.rdb、node.conf 文件并启动了新实例。我确保每个节点都有自己的文件夹(不共享 node.conf 文件)。
- 我尝试使用环回 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。
- 一旦我让集群在 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
node.js - 测试 hset 和 hget 时使用 ioredis 或 node_redis 的奇怪行为
希望有人可以对此有所了解。我一辈子都找不到问题所在。
问题:
我正在尝试使用 hset 在一个文件中向 Redis 添加一个值,并使用hget在另一个文件中获取该值。在测试用例中最终发生的是值已设置但hget返回 null ,就好像那里什么都没有。
试图:
当我在同一个文件中设置后立即尝试获取该值时,会发生真正奇怪的部分。它实际上正常工作!看一下这个...
你可以看到路线很简单......
如果我在我的测试用例中将那个 hget 插入到我的hset下方,那么这个值就会被完美地检索到。有没有人对如何解决这个问题有任何想法?
笔记:
在任何人建议之前,我已经监听了连接的事件,这并不重要,因为我可以直接在hset下方获取值并且它可以工作。这个问题也存在于一个承诺的node_redis安装中。
谢谢!
node.js - 如何在 IOREDIS 中发送 ZRank
我是 Nodejs 的新手,我正在使用ioredis将 redis 命令发送到我的集群。
除了基本的“get”和“set”命令外,我找不到任何关于如何在 ioredis 中使用zrank 命令的ioredis 示例。
我知道 ioredis 实现了它,但参数和回调对我来说是个谜。
如果问题可能重复,谢谢和抱歉。
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 日志中同时执行的其他请求。
我确信这是会话混淆的原因。但无法进一步调试以找到它的根本原因。请帮助我提示如何找到问题的根本原因。不确定这是否真的是封闭范围问题。
javascript - 我应该保持我的 redis 连接持久吗?
我正在考虑使用 redis 作为我的 api 应用程序的键值存储。该 api 基本上只需要一个客户端连接到 redis。我不确定我应该永远保持连接打开吗?还是应该只在需要从 redis 设置或获取值时才打开连接?
人们可能会认为打开连接是一项昂贵的操作,因此从这个意义上说,人们应该更喜欢永久连接。另一方面,保持连接始终打开并不像仅在需要时才打开它那样安全。而且,长时间打开的连接打开可能会导致超时。如果由于某种原因连接失败,redis 是否会尝试重新连接?redis 处理长时间打开的连接有多好?任何帮助表示赞赏!
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(起作用)
node.js - 以交互方式执行操作,它可以工作。以编程方式执行相同的操作,但它失败了。Redis、heroku、节点
这是我的互动环节。它工作得很好。
这是我的代码,以及它的执行方式。
我会说这两个应该产生相同的结果,但他们没有。我正在使用使用npm install redis
. 我知道还有其他客户。
有人知道发生了什么吗?
我将节点客户端从 node_redis 更改为 ioredis。从 更改npm install redis
为npm install ioredis
。现在错误消息提供了更多信息。
仍然没有解决问题。
node.js - node.js从redis集群获取数据,使用ioredis,zrange方法不返回正确数量的数据
我使用这个:redisClient.zrange(key, 1, 1)
并尝试通过该键获取所有数据,但有时列表中的某些数据丢失,但是当我签入redis数据时,c#客户端也一切正常。有任何想法吗?
node.js - Nodejs IOREDIS:如何设置密钥的过期时间?
我正在使用下面给出的代码连接到 Redis 哨兵
我正在使用以下代码设置键的值:
您能否通过提供解决方案来为键值设置过期时间来帮助我,例如 12 小时