问题标签 [go-redis]

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

kubernetes - 如何使用 go-redis 从 redis 副本中读取

我们有一个 go lang 服务,它将转到 redis,为每个请求获取数据,我们也想从 redis 从节点读取数据。我们浏览了 redis 和 go-redis 库的文档,发现为了从 redis slave 读取数据,我们应该从 redis 端触发 readonly 命令。我们在 go-redis 库上使用 ClusterOptions 来设置与 redis 的只读连接。

完成所有这些之后,我们能够看到(使用监控)读取请求仅由主节点处理。我希望这不是预期的,我错过了一些东西或做错了。任何指针将不胜感激来解决这个问题。

更多上下文:上面代码中的 redisAddress 是单个 kubernetes 集群 IP。Redis 使用 kubernetes operator 部署,每个 master 有 3 个 master 和 1 个副本。

0 投票
0 回答
178 浏览

go - 使用 go-redis 在 XReadGroup 中无法使用 NoAck

我用来生成连接和读取消息的包是:“github.com/go-redis/redis”

当我从 golang 中的一个组中读取事件时,我试图声明不使用 NOACK,但是当一个新事件到达时,它会留下这个新事件,就好像它有 NOACK 一样。

在这一部分中,我声明了我如何阅读消息并声明我不使用 ack。

之后,我从 redis-cli 发送一条消息

我从我的 Golang 脚本中得到

如果消息仍在处理中但似乎丢失,则有效。

0 投票
1 回答
61 浏览

go - Redis分布式锁不生效

我是go-redis distributed lock用来实现互斥访问的,我的服务器是单线程服务器。但同时,许多请求都获得了distributed lock.

获取锁码是这样的:

我发现许多请求同时获得锁,结果是

我认为同时只有一个会话可以获得锁定

0 投票
0 回答
118 浏览

go - 如何在 Golang Web 服务器中通过 Go 例程管理 redis 同时更新

我想做一个在 TTL 快完成时更新 Redis 缓存的任务......比如如果缓存中的数据将在 30 秒内被删除然后更新缓存并重置 TTL,但如果缓存中的数据将在 5 分钟内被删除,然后什么都不做

我也想用 调用这个函数Go routine,因为我希望它只是一个后台进程

现在我想在 golang gin 服务器中实现这个设置,我不确定并发请求将如何影响这个设置......

我担心的是 ,假设我的服务器同时收到 50 个请求,并且缓存也将在 30 秒内过期,所有这 50 个请求都会尝试更新我的缓存吗?

如果是,那么我该如何防止它..如何确保不会发生我的缓存的并发更新..

下面给出的是我想要做的一个小代码表示

0 投票
1 回答
148 浏览

go - 拨打tcp:6379:连接:连接被拒绝

我正在 GKE(Google Kubernetes Engine)和使用 Redis 的 GCE 实例的系统上构建应用程序。当我尝试从 GKE 上的应用程序 pod 连接到 GCE 上的 Redis 时,我收到连接被拒绝。(dial tcp <REMOTE-IP>:6379: connect: connection refused)该应用程序是用 Go 编写的,redis 库是 go-redis(v8)。为什么我无法连接?

连接部分和出错部分的源码如下。

主机名解析了,所以不是DNS问题,而且redis-cli命令是可执行的,所以看起来也不是防火墙问题。


  • 后记

这是在运行 Go 应用程序的情况下从 Pod 运行命令的结果

0 投票
1 回答
310 浏览

connection - go-redis/v8 连接池超时

** 连接池 **

连接池在使用中偶尔会出现“连接池超时”</p>

redis 使用“用于 Redis 的 Amazon ElastiCache”

谢谢!!

0 投票
0 回答
90 浏览

redis - redis 扫描不会返回所有值。(go-redis)

RedisSCAN命令使用 small COUNTfor large 键,并非总是返回所有键。

  • 10000 个键,1000 个 COUNT = 返回所有键。
  • 10000 个键,10 个 COUNT = 返回并非所有键。

我想获得这么多键(1亿)的所有键,而不使用像keys. 我应该怎么办?

0 投票
2 回答
545 浏览

go - 当我使用`go install`时,它返回的不是主包

import "github.com/go-redis/redis/v8"在我的代码中使用过。环境是go1.17.2 Windows AMD64。我执行go install github.com/go-redis/redis/v8@latest了,但结果是package github.com/go-redis/redis/v8 is not a main package。我的操作或环境配置有什么问题。go env GO111MODULE=on.

当我执行时go run main.go,它显示cannot find package在导入行github.com/go-redis/redis/v8

,中的内容go.mod(使用简单的go mod init& go mod tidy):

0 投票
2 回答
59 浏览

go - 如果上下文为零,WithContext 方法是否需要恐慌?

我想WithContext为 struct 编写一个方法,并从net/http's中获取灵感Request.WithContext

Request.WithContext我的问题是:如果上下文为零,为什么会恐慌:

我也应该这样吗?

有关我为什么要创建WithContext方法的更多上下文:我正在实现一个接口,该接口在其签名中不提供上下文参数,但相信实现需要它。

更具体地说,我正在编写一个 Redis 后端,用于gorilla/session使用Go 的官方 Redis 客户端,其中GetandSet方法采用context.Context

这个想法是,我的 redis 存储将在需要时使用新的上下文对象进行浅拷贝,然后使用:

0 投票
0 回答
51 浏览

go - 使用管道的 Redis 客户端计数

我刚刚使用管道对 GO 应用程序进行了更新,我注意到在我的 redis 监控应用程序中连接的客户端数量从 1/2 猛增到 300+

我似乎无法找到有关管道是否正常、它们作为新客户端连接或这是否是异常行为的信息。

有没有其他人看到这个?

  • Redis 连接是全局的。
  • Redis 设置是默认设置。
  • 在一些 go 例程中使用。

示例用法..

往往会发生的情况是,每次像上面那样运行管道时,它都会创建一个新客户端——即使管道正在使用全局 redis 连接。

只发生在管道上,其他 redis 调用都很好。