问题标签 [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.
go - Golang 将数据增量到 Redis
我一直在玩golang和redis。我只是建立了一个简单的 http 服务器,并想增加 redis 上的请求。我正在炸毁连接(我认为)。我发现使用 redigo 您可以使用连接池,但不确定在我为请求提供服务时如何在 go 中实现它(您从哪里实例化/调用池)。
错误:无法分配请求的地址。
任何建议将不胜感激......我确定我错误地建立了连接,但只是不知道如何改变。
编辑:根据 pauljz 的建议进行了修改——现在效果很好
go - 重复使用 Redigo 连接,而不是每次都重新创建它
连接到 Redigo 并在函数内操作数据很容易,但是当您必须重新使用它的连接时就会出现问题,显然是出于性能/实用性的原因。
在这样的函数中执行此操作:
但是把它带到外面不会:
返回以下错误:
我尝试将连接设置为const (ant),将defer放在 main 函数中,令我沮丧的是也无法正常工作。
这是一个更大的问题,因为我有许多其他功能必须与 Redis 通信,但每次都重新创建与 Redis 的连接似乎很愚蠢。
Redigo API 仅展示了如何创建Dial实例,但没有进一步解释如何重用它。
您可能在我的演讲中迷失了方向,但我想在这里提供一些背景信息,所以我的清晰简洁的问题是:您如何重新使用(而不是每次都重新创建)Redigo 连接?
go - Redigo Redis Pool 真的应该是一个全局变量吗?
在Redigo Docs for Pool的示例中,redis 池在 func main 中设置为全局变量。这是一种犹太的做事方式吗?你真的应该使用左右全局变量,还是有更好、更首选的方式来完成同样的事情?
go - Golang:在 Redigo 中的 RedisPool 上选择 DB
使用 redigo,我创建了一个池,如下所示:
我遇到的问题是,每次获得新连接时,我都需要设置数据库,因为我使用不同的 redis 数据库,因为我在 VPS 上托管了许多站点。
所以,像这样:
每次使用 redis 时都必须选择 db 似乎是多余的,而且还会带来一个问题,因为我将它用于会话,即使用不是我的代码与我的池中的 redis 连接一起工作,这使得“不可能”设置正确的 db它。
我想做的是为池设置dbno,这样每当有人要求从池中建立新连接时,它就会带有已经设置的正确db,即每次都没有明确设置它。
你是如何在你的应用程序中解决这个问题的?
谢谢。
go - 如何使用 redigo 库从 golang 查询 Redis db
我试图弄清楚在一个命令中查询 Redis db 的多个键的最佳方法是什么。我见过可以用于 redis-cli 的 MGET。但是你如何使用来自 GOlang 代码的 redigo 库来做到这一点。想象一下,我有一组键,我想在一个查询中从 Redis db 中获取这些键的所有值。
提前致谢!
go - 获取响应行错误 - Redigo Redis 客户端
我正在用 JSON 序列化结构创建字符串,并在 redis 连接上运行 PUBLISH 命令。
这个 go 服务用于处理/重新利用我们的聊天应用程序上发送的所有消息,然后将事件发布给客户端。
在执行 PUBLISH 命令后,redis 连接经常会出现错误,它是以下之一:
- redigo:错误的响应行终止符
- redigo:意外的响应线
无法理解这些并且错误不断出现,这些响应是什么意思?&& 为什么它们会发生在我身上?
go - redigo:读取具有可变键的redis哈希
我需要从 redigo 读取 redis 哈希。此哈希具有可变键。这会导致问题,因为 ScanStruct 要求我事先知道这些键,因此我可以将其放入结构中并将 HGETALL 结果解压缩到该结构中。
有没有办法解析具有未知键的 redigo HGETALL 结果?只要我可以从内部访问结果,它不必与 ScanStruct(甚至 redigo)一起使用。
go - 在 Go 中重新连接到 Redis 订阅的惯用方法是什么?
我正在使用 redigo 库尝试订阅 Redis 频道,然后处理已发布的消息。我如何处理它出错的情况?这就是我想出的。这是一个好方法吗?有没有更好的办法?
注意:这个问题特定于 redigo,但我认为它适用于需要重新连接的其他地方。
我只是将它放在示例的 main() 函数中。它真的会在一些 goroutine 中运行。
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 字段组合组合成一个进行编组。
任何帮助,将不胜感激。
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!
我将不胜感激有关如何弄清楚发生了什么的任何想法。