问题标签 [redigo]

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 回答
327 浏览

go - 我应该在 redis 多事务的每个步骤中检查错误吗?

我应该在 redis 多事务的每个步骤中检查错误吗?如果发生一些错误,是否意味着发布命令也会返回错误?

例如。我可以吗 :

或者,我应该:

0 投票
2 回答
2012 浏览

go - gomodule/redigo 如何将多个键推送到 redis

我正在尝试将多个元素推送到一个 redis 键。当前使用使用https://github.com/gomodule/redigo的 redis 池连接。

如果我尝试将一个数组放入 rpush ,则会推送一个连接数组的字符串。我怎样才能推送单个元素

0 投票
2 回答
171 浏览

go - 如何在golang中动态命名结构项?

我正在使用 redigo,而 ScanStruct 非常有用。但是很明显我正在尝试输入 urlhost 和 urlreq 并且这些值是根据用户的实际 uri 动态生成的。

显然,下面的代码不起作用,那么我如何通过动态命名我的结构来实现我想要的,以便我可以正确地 ScanStruct?

提前致谢。

0 投票
1 回答
977 浏览

go - 为可扩展的 Go 应用程序提供 Redis 客户端的最佳方式

我在应用程序中使用 redigo,我想知道我的服务应该如何与 Redis 交互。

维基百科对线程安全有这样的说法:

线程安全是适用于多线程代码的计算机编程概念。线程安全代码仅以确保所有线程正常运行并满足其设计规范而没有意外交互的方式操作共享数据结构。

我对此的解释是,如果一个数据结构需要被多个客户端访问(在当今的微服务世界中,数百、数千甚至数百万)线程安全是我们确保正确保存状态的方式系统无论何时何地访问数据。这意味着解决访问优先级(哪个客户端首先到达那里),确保锁定突变(一次只有一个客户端可以写入)同时促进并发性(如果没有更改,许多客户端可以读取数据)。

从我收集到的信息来看,一个 redigo 客户端可以被多个“goroutines”(或线程)同时使用。这让我相信像我熟悉的 Java 中的单例实现就足够了。

我看到了示例,例如,herehere,其中 Redis 连接(pools)只是在main方法中创建并传递给各种 redigo 函数。这似乎不是完成工作的最可靠方法,尽管它们似乎确实遵循单例模式。(可以理解的是,第二篇文章实际上只是一个快速的 n'dirty API。)

我会这样做:

  1. 在返回 redigo的main函数调用中。initpool

  2. 创建接受 apool作为参数的处理函数(控制器)(一种“脏”依赖注入)。

这将(我认为)确保只pool创建一个。

pool或者,每次我想访问数据存储时,是否有任何理由无法创建(客户端)?pool如果客户端在事务完成后被杀死,那么每次处理程序收到请求时启动一个新的有什么问题吗?

0 投票
1 回答
1195 浏览

go - Redis 在 Docker 容器中失去连接

我正在使用 redigo 制作 PubSub,并且连接是由 redis 池创建的。

这是 Redis 池代码:

这是我的 PubSub 代码:

在我的 PubSub 频道中收到 10k 条消息后,连接丢失,我收到一个 redis.Error 消息 EOF

任何想法为什么会发生这种情况?即使我在本地运行,问题也会发生

0 投票
1 回答
3963 浏览

go - dial tcp remote_ip:6379: connect: 连接超时

我将 redigo 用于常规命令和订阅。每隔几天我就会收到这个错误,这会导致恐慌。

我猜网络存在一些滞后或轻微干扰,导致连接超时。

我怎样才能避免这种情况?我可以让程序等待几秒钟直到问题解决,而不是惊慌失措。

我怎样才能避免这种情况?我应该为拨号定义超时吗?如

  • DialReadTimeout
  • DialWriteTimeout
0 投票
0 回答
4796 浏览

go - 读取 tcp 127.0.0.1:51719->127.0.0.1:6379:读取:连接由对等方重置

这是我的代码

错误是

这有什么问题?需要任何帮助,谢谢。

0 投票
0 回答
803 浏览

go - 使用连接池时如何修复内存泄漏?

我正在使用 redigo 和连接池。下面是我设置连接池的代码和对 Redis 的 SET 调用的包装器

上面的代码泄漏了内存。我正在正确关闭连接defer c.Close()_, err := c.Do("SET", key, value)令人惊讶的是,如果我像我不做任何事情那样注释掉,c.Do()那么程序就不会泄漏内存。

0 投票
0 回答
502 浏览

go - Redis Key Scan 并不总是返回所有值

我有一个问题,我的 Redis 键 SCAN(带有通配符)似乎没有始终如一地返回所有值。它可以正常工作很多次,但并非总是如此。也许我不明白扫描应该如何工作。我正在使用 redigo 作为我的库。

与通配符匹配的模式:

  • “event.query.zt2qXIVY80fCTbmWf3sbC5QaoTg2*”

Redis 中的键:

  • event.query.zt2qXIVY80fCTbmWf3sbC5QaoTg2?DateRange2019-04-12-2019-04-17
  • event.query.zt2qXIVY80fCTbmWf3sbC5QaoTg2?DateRange2019-04-13-2019-04-13
  • event.query.zt2qXIVY80fCTbmWf3sbC5QaoTg2?DateRange2019-04-08-2019-04-14
  • event.query.zt2qXIVY80fCTbmWf3sbC5QaoTg2?DateRange2019-04-12-2019-04-12

我基本上是在寻找该 GUID 中的任何键,但匹配似乎不一致。这是我用来进行模式匹配的代码。

0 投票
2 回答
1902 浏览

go - golang + redis 并发调度器性能问题

我编写了一个简单的并发调度程序,但它似乎在高级并发上存在性能问题。

这是代码(调度程序+并发限速器测试):

问题在于 10000 个例程,有时即使没有向 redis 发送命令,程序也会卡住(使用“redis-cli monitor”检查),并且我的系统最大打开文件设置为 20000。

我做了分析,很多“syscall.Syscall”,有人可以给点建议吗?我的调度程序有问题吗?