Golang Go语言中一个 redigo 奇怪的问题

发布于 1周前 作者 yibo5220 来自 Go语言

Golang Go语言中一个 redigo 奇怪的问题

在我服务初始化的时候创建了 redis 连接池 当我想使用订阅功能的时候报了错 代码如下

//conn := p.pool.Get()
	conn , _ := redis.Dial("tcp","192.168.31.226:16379")

	subConn := redis.PubSubConn{conn}
	subConn.Subscribe(key)
	go func() {
		for  {
			fmt.Println("wait")
			switch res := subConn.Receive().(type) {
			case redis.Message:
				pattern := (*string)(unsafe.Pointer(&res.Pattern))
				channel := (*string)(unsafe.Pointer(&res.Channel))
				message := (*string)(unsafe.Pointer(&res.Data))
				callback(*pattern,*channel,*message)
			case redis.Subscription:
				fmt.Printf("%s: %s %d\n", res.Channel, res.Kind, res.Count)
			case error:
				fmt.Println(res.Error())
				continue
			}
		}
	}()

当我 p.pool.Get()获取一个 redis 连接的时候 就会报错 read tcp 192.168.224.30:53698->192.168.31.226:16379: use of closed network connection 如果我注释掉这个 用了 redis.Dial 的时候 这个时候订阅又是正常的了.. 问一下 这是啥问题...


更多关于Golang Go语言中一个 redigo 奇怪的问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

4 回复

redigo 的连接池他自己都没信心。换 go-redis 吧。

更多关于Golang Go语言中一个 redigo 奇怪的问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


subConn.Subscribe(key) 放下面试试??

#1 redis golang 的话 直接选 go-redis 吗?

关于你在使用 Golang 的 Redigo 库时遇到的奇怪问题,这里有几个可能的解决方向和检查点,希望能帮助你定位并解决问题:

  1. 版本兼容性:首先确认你使用的 Redigo 版本是否与你的 Go 语言版本兼容。有时候,库的更新可能会引入不兼容的改动。

  2. 连接管理:检查你的 Redis 连接管理逻辑。确保连接在使用后正确关闭,并且没有资源泄露。Redigo 提供了连接池管理,确保你正确配置了连接池参数,如最大空闲连接数、最大活动连接数等。

  3. 错误处理:仔细查看你的错误处理逻辑。Redigo 的很多操作都会返回错误值,确保你检查了这些错误并进行了适当处理。

  4. 并发问题:如果你的应用是多线程的,确保你的 Redis 操作是线程安全的。Redigo 的连接不是线程安全的,因此不应该在多个 goroutine 之间共享同一个连接。

  5. Redis 服务器状态:检查 Redis 服务器的状态和配置。有时候,问题可能出在服务器端,比如配置错误、资源限制等。

  6. 日志和调试:增加日志记录,特别是在执行 Redis 操作前后。这可以帮助你更好地理解问题的上下文,并可能揭示一些隐藏的问题。

如果以上步骤都不能解决问题,你可以考虑提供更详细的错误信息和代码片段,以便进一步分析。希望这些建议对你有所帮助!

回到顶部