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

go - Golang 将数据增量到 Redis

我一直在玩golang和redis。我只是建立了一个简单的 http 服务器,并想增加 redis 上的请求。我正在炸毁连接(我认为)。我发现使用 redigo 您可以使用连接池,但不确定在我为请求提供服务时如何在 go 中实现它(您从哪里实例化/调用池)。

错误:无法分配请求的地址。

任何建议将不胜感激......我确定我错误地建立了连接,但只是不知道如何改变。

编辑:根据 pauljz 的建议进行了修改——现在效果很好

0 投票
2 回答
12713 浏览

go - 重复使用 Redigo 连接,而不是每次都重新创建它

连接到 Redigo 并在函数内操作数据很容易,但是当您必须重新使用它的连接时就会出现问题,显然是出于性能/实用性的原因。

在这样的函数中执行此操作:

但是把它带到外面不会:

返回以下错误:

我尝试将连接设置为const (ant),将defer放在 main 函数中,令我沮丧的是也无法正常工作。

这是一个更大的问题,因为我有许多其他功能必须与 Redis 通信,但每次都重新创建与 Redis 的连接似乎很愚蠢。

Redigo API 仅展示了如何创建Dial实例,但没有进一步解释如何重用它。

您可能在我的演讲中迷失了方向,但我想在这里提供一些背景信息,所以我的清晰简洁的问题是:您如何重新使用(而不是每次都重新创建)Redigo 连接?

0 投票
1 回答
1093 浏览

go - Redigo Redis Pool 真的应该是一个全局变量吗?

Redigo Docs for Pool的示例中,redis 池在 func main 中设置为全局变量。这是一种犹太的做事方式吗?你真的应该使用左右全局变量,还是有更好、更首选的方式来完成同样的事情?

0 投票
4 回答
6071 浏览

go - Golang:在 Redigo 中的 RedisPool 上选择 DB

使用 redigo,我创建了一个池,如下所示:

我遇到的问题是,每次获得新连接时,我都需要设置数据库,因为我使用不同的 redis 数据库,因为我在 VPS 上托管了许多站点。

所以,像这样:

每次使用 redis 时都必须选择 db 似乎是多余的,而且还会带来一个问题,因为我将它用于会话,即使用不是我的代码与我的池中的 redis 连接一起工作,这使得“不可能”设置正确的 db它。

我想做的是为池设置dbno,这样每当有人要求从池中建立新连接时,它就会带有已经设置的正确db,即每次都没有明确设置它。

你是如何在你的应用程序中解决这个问题的?

谢谢。

0 投票
2 回答
10974 浏览

go - 如何使用 redigo 库从 golang 查询 Redis db

我试图弄清楚在一个命令中查询 Redis db 的多个键的最佳方法是什么。我见过可以用于 redis-cli 的 MGET。但是你如何使用来自 GOlang 代码的 redigo 库来做到这一点。想象一下,我有一组键,我想在一个查询中从 Redis db 中获取这些键的所有值。

提前致谢!

0 投票
1 回答
1919 浏览

go - 获取响应行错误 - Redigo Redis 客户端

我正在用 JSON 序列化结构创建字符串,并在 redis 连接上运行 PUBLISH 命令。

这个 go 服务用于处理/重新利用我们的聊天应用程序上发送的所有消息,然后将事件发布给客户端。

在执行 PUBLISH 命令后,redis 连接经常会出现错误,它是以下之一:

  • redigo:错误的响应行终止符
  • redigo:意外的响应线

无法理解这些并且错误不断出现,这些响应是什么意思?&& 为什么它们会发生在我身上?

0 投票
1 回答
3224 浏览

go - redigo:读取具有可变键的redis哈希

我需要从 redigo 读取 redis 哈希。此哈希具有可变键。这会导致问题,因为 ScanStruct 要求我事先知道这些键,因此我可以将其放入结构中并将 HGETALL 结果解压缩到该结构中。

有没有办法解析具有未知键的 redigo HGETALL 结果?只要我可以从内部访问结果,它不必与 ScanStruct(甚至 redigo)一起使用。

0 投票
1 回答
2888 浏览

go - 在 Go 中重新连接到 Redis 订阅的惯用方法是什么?

我正在使用 redigo 库尝试订阅 Redis 频道,然后处理已发布的消息。我如何处理它出错的情况?这就是我想出的。这是一个好方法吗?有没有更好的办法?

注意:这个问题特定于 redigo,但我认为它适用于需要重新连接的其他地方。

我只是将它放在示例的 main() 函数中。它真的会在一些 goroutine 中运行。

0 投票
3 回答
6019 浏览

json - 使用 redigo 从 Redis 将 json 部分转换为 Go 结构

我有一个由浏览器发布的 json。这是一个哈希

比如说,三个像这样的字段:

然后使用redigo命令将其存储在 Redis 中:

现在,我想在 Go 中使用这样的模型

1.我打电话给Redis

我通过 redis-cli 看到正确存储的值,但是将v回复转换为Model结构不起作用:

我想访问单独的 k:v 对,例如:

2.我还想将 json.Marshal myJson作为 {a}、{a,b}、{a,c}、{a,b,c} 等的组合返回浏览器。我不确定如何将各种 a、b、c 字段组合组合成一个进行编组。

任何帮助,将不胜感激。

0 投票
1 回答
163 浏览

python - Redis 使用的 RAM 不足

我正在使用 Go 和 Redis 开发一个 API。问题是内存使用不足,我找不到问题的根源。

TL;DR 版本

有成百上千的哈希对象。每个 1 KB 对象(键+值)占用约 0.5 MB 的 RAM。但是,没有内存碎片(INFO显示无)。

此外,dump.rdb 比 RAM 集小 70 倍(360KB dump.rdb 与 25MB RAM 用于 50 个对象,35.5MB 与 2.47GB 用于 5000 个对象)。

长版

Redis 实例主要填充task:123以下类型的哈希:

此外,还有几个整数计数器、一个列表和一个排序集(均由 task_id 组成)。

RAM 使用量与任务对象的数量呈线性相关。

50 个任务的 INFO 输出:

和 5000 个任务:

50 个任务的大小dump.rdb为 360kB,5000 个任务的大小为 35553kB。

每个任务对象的序列化长度约为 7KB:

我写了一个 Python 脚本试图重现这个问题:

它只消耗 80MB 的 RAM!

我将不胜感激有关如何弄清楚发生了什么的任何想法。