问题标签 [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 回答
429 浏览

node.js - Redis 节点监听 SET 事件并为每个请求设置一个 TTL

在我的 Nodejs 应用程序中,我使用了一个在我的 Redis 数据库中设置键的库。因此,我需要监听创建/更新密钥的每个请求并ttl在每个密钥上添加一个(无论它是否已经存在)。

我有我的主要 Redis 客户端(向 Redis 数据库添加密钥):

我添加了另一个应该监听set事件的客户端:

当我运行此代码时,我会进入subscriberRedis:set => ERR only (P)SUBSCRIBE / (P)UNSUBSCRIBE / PING / QUIT allowed in this contextsubscriberRedis.config('set',...)

我不确定我在这里缺少什么。

编辑

我将代码更改为此,它现在可以工作了。但是,当我转向生产时,您认为“竞争条件”问题仍然存在吗?

0 投票
1 回答
896 浏览

javascript - 连接到数据库 REDIS 的 Svelte 自定义存储

我无法连接到 Svelte 应用程序内的 Redis 数据库。为此,我正在尝试制作一个自定义 store.js,但我已经在努力导入节点客户端(无论我使用什么客户端)。对于'ioredis',文档说像这样使用它:

任何人都可以就如何实现它提出一些提示吗?这个想法是有一个应用程序,其唯一目的是使用 pub/sub 方法解析/检索 REDIS db 的值。我想我错过了汇总的一些东西以及它在编译时处理 nodejs 依赖项的方式,或者可能根本不可能那样做?

0 投票
2 回答
1656 浏览

node.js - Redis 缓存过期

我在使用 ioredis 时遇到了这个问题,我在其中创建了一个密钥并为该密钥设置了到期时间。我的代码看起来像这样

我遇到的问题是,有时ttl是正数,有时是负数。因此,导致人们相信 -1 可能是无限的 ttl。但在进一步研究和反复试验后,任何小于或等于 0 的东西都会立即过期。所以我的问题是,为什么有些密钥即使设置了 ttl 也不会过期?

0 投票
1 回答
1192 浏览

node.js - 有没有办法从 nestjs-redis 客户端获取 ioredis 实例?

我正在使用Nestjs Redis组件,该组件使用ioredis Node Redis 客户端库。发生的事情是我想通过Redis 上可用的GEOADD命令保存地理信息,也可以在 ioredis 中使用。

那么,如何从 Nestjs-Redis 组件中获取 ioredis 实例?是否可以?

提前致谢!

0 投票
2 回答
542 浏览

redis - 如何在 NestJS 中创建 RedisService?

我正在使用 Nest 7.1.5 和 ioredis 4.17.3。我正在尝试创建一个 RedisService 并在之后注入它。这是我到目前为止所拥有的:

redis.providers.ts

redis.service.ts

redis.module.ts

当我尝试注入此服务时,出现此错误:

我在这里想念什么?任何帮助或想法表示赞赏。谢谢你。

0 投票
1 回答
1639 浏览

node.js - 使用 node.js 连接到 Azure Redis 集群 ioredis 不起作用

我一直在尝试使用ioredis连接到 Azure 中的 Redis 三节点集群。

当我使用 Redis.Cluster 构造函数连接时:

我得到的错误是:

当我使用非集群 Redis 连接进行连接时:

我得到的错误是:

如您所见,它在端口 6380 上使用 TLS。Azure 为我提供了一个主机+端口组合和两个不同的访问密钥(主要/次要) - 我觉得这很奇怪,我应该使用哪个访问密钥?另外我不确定是否应该以集群模式连接,但我更愿意获得集群的好处。当我这样做时,它似乎试图找到127.0.0.1:6380可能不正确的插槽。

在 Azure 的快速入门中,他们使用 node_redis 连接:

我希望这里有人会遇到同样的问题并解决它。

谢谢!

0 投票
1 回答
114 浏览

node.js - ioredis - 如果 redis 关闭,则忽略请求

我正在使用ioredis。为了防止可能导致我的应用程序崩溃的巨大缓冲区,我想在 redis 关闭时忽略请求,并捕获这些请求。有没有办法做到这一点?

0 投票
1 回答
167 浏览

node.js - Heroku Node.js RedisCloud Redis::CannotConnectError 在 localhost 而不是 REDISCLOUD_URL

当我尝试将我的 Nodsjs 应用程序连接到 Heroku 上的 RedisCloud 时,我收到以下错误

我什至尝试在代码中直接设置redis URL和端口来测试它。但是,它仍然尝试连接到 Heroku 上的 localhost,而不是 RedisCloud URL。

完整转储日志https://pastebin.com/N9awJYL9

0 投票
1 回答
813 浏览

javascript - IOREDIS - 尝试从 Redis 迁移到 KeyDB 时出错

我们使用 Redis 已经有很长一段时间了,直到我们得出结论,迁移到 KeyDB 可能是其功能的一个不错的选择。

环境

背景

参考 KeyDB 文档,KeyDB 兼容最新版本的 Redis。

KeyDB 与 Redis 模块 API 和协议保持完全兼容。因此,从 Redis 到 KeyDB 的迁移非常简单,并且类似于您在 Redis 到 Redis 方案中的迁移。https://docs.keydb.dev/docs/migration/

在同一页面中,他们提供了与 KeyDB 兼容的 redis 客户端列表。该列表包含我正在使用的 ioredis。

KeyDB 与此处列出的所有 Redis 客户端兼容,因此不必担心。只需像使用 Redis 一样使用您的客户端。 https://docs.keydb.dev/docs/migration/

问题

如文档中所述。我应该能够在几个小时内轻松迁移到 KeyDB。好吧,事实并非如此!至少对我来说不是!我花了我最后 3 天在互联网上搜索解决方案。我得出的结论是我应该写信给 stackoverflow :)

这个问题有点有趣。客户端实际上正在使用 KeyDb,并且该过程实际上正在设置和检索密钥(不确定,但可能会在错误期间丢失一些数据。)。但是在 10% 的时间里,它给了我以下错误,并在一段时间后继续工作。当我使用 Redis 在我的生产环境中存储会话和其他内容时;我不能冒险忽略这种坚持错误。

我几乎在所有互联网上搜索了这个错误,但没有人提供解决方案,也没有人解释出了什么问题。

幸运的是,该过程“有时”会显示错误堆栈。它指向lib/redis/index.ts:711ioredis 代码内部。我不知道它做了什么。

https://github.com/luin/ioredis/blob/master/lib/redis/index.ts#L711

我在 ioredis github 存储库上发现了一些问题,提到了一些 EPIPE 错误。但它们中的大多数都是关于错误处理的东西,并且都标记为已解决。

我还在谷歌上发现了一些一般的 EPIPE 错误(其中大部分是关于 socket.io 的,这不是我使用的东西。)

包起来

这件事有什么问题?

0 投票
2 回答
814 浏览

node.js - 在多个助手中将 Node.js redis 客户端声明为 const 是一种安全的使用方式吗?

这有点难以表达,所以我希望我的标题不会太糟糕。

我有一个前端/后端 React/Node.js(REST API) Web 应用程序,我想添加 Redis 支持来存储检索应用程序全局设置和每个用户的特定设置(如语言首选项、上次登录等...简单东西)所以我正在考虑向我的后端 REST API 添加一个 /settings 分支,以从 redis 实例推送/拉取这些信息。

这就是我对 Node.js 缺乏经验的地方。我正在考虑使用 ioredis 客户端,它似乎太容易了。如果我有几个助手(多个.js 将调用redis)将客户端构建为const每个中的一个安全吗?或者是否有另一种推荐的方法来重用它的单个实例?

这是我正在考虑做的一个示例。想象一下,如果我有 3 个需要访问 redis 客户端的辅助模块。const我应该像每个一样声明它们吗?或者将它们集中在一个辅助模块中,并从中获取客户端?做这两个有什么坏处吗?

谢谢你。