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

go - 如何在 redisearch-go (Golang) 中为 redigo 客户端提供密码

我正在尝试使用 Go 连接到我的 RediSearch(Redis 模块)实例。

梳理生成客户端的文档和 Go 代码,我看不到如何将身份验证选项传递给 Redigo 客户端......这是我的疏忽还是我们只是希望在不保护数据库的情况下使用 RediSearch?

在生成 RediSearch 客户端时,我还尝试了以下操作。每个都给出有关 URL 格式的错误:

在返回客户端pool.goNewSingleHostPool函数中,它似乎应该传递DialOptionsDialRedigo 函数而不是nil,并将这些选项传递给 RediSearchNewClient函数......

0 投票
0 回答
248 浏览

go - 在 redigo 客户端 redis 池库中轮换密码

我的应用程序正在使用 redigo 客户端库与 redis 服务器建立 TCP 连接。我想在运行时更改redis的密码,并希望redigo库在后续连接中使用新密码。(在 redis 池中)

我已经通过以下方式定义了我的 redis-pool 对象来实现这一点。

调用函数时的选项是:

getRedisPassword 函数如下所示:该函数确实调用了一个脚本,该脚本获取了 redis 集群的最新密码。

调用函数时我面临两个问题:

  1. 许多卷曲连接正在建立并悬而未决。
  2. 重负载会导致 goroutine/线程耗尽。
  3. 脚本进程不会终止。

你能帮我用更好的方法来实现同样的目标吗?提前致谢。

0 投票
0 回答
611 浏览

go - 订阅频道时从redis接收EOF

Redis 在 1 小时后有某种超时,当我订阅某些频道时会引发 EOF 错误。

我的代码:

每小时我都会在日志中看到这一点(这会导致我的服务崩溃):

为什么我总是收到此 EOF 消息?我应该在某处设置某种超时吗?

版本:Redis docker => redis:6.0.9-alpine(没有 redis.conf)

雷迪戈 =>v1.8.3

0 投票
1 回答
206 浏览

redis - 从 GET 返回的 Redigo 类型的值

我希望能够获取一个键的值并立即知道它是什么类型。我在用着

这将返回一个interface{}in res。根据类型,我想调用一个辅助函数,如redigo.String(res)or redigo.Bool(res)。我知道我可以conn.Do("TYPE", key)单独获取类型,但是如何仅从一个 GET 请求的结果中获取类型?

0 投票
1 回答
69 浏览

go - 如何使用 redisgo Api 设置带有 Expiry 的密钥

如何使用 redisgo 在 GoLang 中使用下面的 Redis 命令。

我试过在下面使用,

设置密钥时有什么方法可以设置ttl吗?

0 投票
0 回答
279 浏览

go - Golang Redis PubSub 发送重复消息

我正在尝试使用 golang 上的 redis pub/sub 实现构建一个功能,但是对于连接到服务器(WebSocket)的每个客户端,发布的消息数量都会翻倍。

如何停止重复?或者是什么导致了重复。

0 投票
0 回答
370 浏览

go - redigo 错误日志:写入:对等方重置连接

几乎相同的时间(与 redigo 错误日志的时间点:write: connection reset by peer?),redis 错误日志:
Client id=45183 addr=127.0.0.1:40420 fd=39 name= age=39706 idle=46 flags=N db=0 sub=8 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=16114 oll=528 omem=8545237 events=rw cmd=ping scheduled to be closed ASAP for overcoming of output buffer limits.

去错误日志

write tcp 127.0.0.1:40806->127.0.0.1:6379: write: connection reset by peer

在此之前,Go 程序大约有 7 分钟没有收到订阅消息。我认为这是由于未使用消息引起的缓存溢出。

Redis 客户端输出缓冲区限制是默认配置。linux fd和连接数都正常,找不到原因。

这是我的代码:

服务器.go

池.go

0 投票
2 回答
246 浏览

go - How to change redis passwd without downtime

for the safety concern, we plan to change our redis passwd periodically(like every 4weeks). The question is how to change it without external downtime or just a very short period of time.

My plans are:

  1. clear the passwd on redis server and restart.
  2. seeing as there's no passwd required, clients can still reconnect to redis server even with obsolete passwd
  3. clients reload new passwd from config center periodically, and soon after, all clients will have been updated to the new passwd.
  4. change the redis server to new passwd and restart.
  5. clients use new passwd to reconnect to redis server

But when I tried it(I'm using redigo), I got ERR Client sent AUTH, but no password is set on step 2. Seems like we can't connect to redis with extra passwd if it doesn't require passwd. But when I use redis-cli, it can! I want to know how redis-cli achieve this, and how can I do that with redigo?

0 投票
1 回答
1219 浏览

go - 如何将 Golang 中的 HSET 时间转换为 redigo(Redis)?

我正在使用 redigo 在 redigo 中存储和检索数据。我有一个结构,其中包含一个类型定义。我想在 Redis 中Data使用存储结构。HSET我有一个类型定义,可以通过向我的类型ScanStruct添加一个函数来使用。RedisScanTimestamp

问题是 Redis 存储Timestamp如下ext, wall, loc时间字段。您不能从这些字段中创建新的 Time 对象,因此这毫无用处。为 redigo 序列化结构的正确方法是什么?

0 投票
1 回答
148 浏览

redis - Redigo 连接池 - 如何获得更多连接?

我正在构建一个面向性能的 REST-API。骨架是用go-swagger构建的。

API 有 3ms 的响应时间,并且在单次使用中成功,而响应时间只需要 0.5ms - 0.8ms。对 redis 进行了两次调用。

这是池的启动方式:

这是唯一使用池的地方:

所以基本上一开始我从池中得到一个连接,用于两个redis请求,然后关闭它。我以前defer conn.Close()按照文档中的说明使用过,但它也不起作用。vm.overcommit_memory=1net.core.somaxconn=512在服务器上设置。

单次使用 API 没有问题。当处于压力之下时,比如每秒 4000 个请求,它会在第一个 10 秒内工作,然后变得非常慢并且无法及时响应(开始时规定的 3 毫秒)。

当我检查 ActiveCount 和 IdleCount 时,值在 2 到 5 之间并且始终相同。MaxActive 值为 10.000 是否应该有更多的连接?还是我错过了一些关键设置?