Golang Go语言中一个 redigo 奇怪的问题
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
redigo 的连接池他自己都没信心。换 go-redis 吧。
更多关于Golang Go语言中一个 redigo 奇怪的问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
subConn.Subscribe(key) 放下面试试??
#1 redis golang 的话 直接选 go-redis 吗?
关于你在使用 Golang 的 Redigo 库时遇到的奇怪问题,这里有几个可能的解决方向和检查点,希望能帮助你定位并解决问题:
-
版本兼容性:首先确认你使用的 Redigo 版本是否与你的 Go 语言版本兼容。有时候,库的更新可能会引入不兼容的改动。
-
连接管理:检查你的 Redis 连接管理逻辑。确保连接在使用后正确关闭,并且没有资源泄露。Redigo 提供了连接池管理,确保你正确配置了连接池参数,如最大空闲连接数、最大活动连接数等。
-
错误处理:仔细查看你的错误处理逻辑。Redigo 的很多操作都会返回错误值,确保你检查了这些错误并进行了适当处理。
-
并发问题:如果你的应用是多线程的,确保你的 Redis 操作是线程安全的。Redigo 的连接不是线程安全的,因此不应该在多个 goroutine 之间共享同一个连接。
-
Redis 服务器状态:检查 Redis 服务器的状态和配置。有时候,问题可能出在服务器端,比如配置错误、资源限制等。
-
日志和调试:增加日志记录,特别是在执行 Redis 操作前后。这可以帮助你更好地理解问题的上下文,并可能揭示一些隐藏的问题。
如果以上步骤都不能解决问题,你可以考虑提供更详细的错误信息和代码片段,以便进一步分析。希望这些建议对你有所帮助!