V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
hcyg
V2EX  ›  Go 编程语言

一个 Golang redigo 奇怪的问题

  •  
  •   hcyg · 2020-03-16 11:47:49 +08:00 · 2152 次点击
    这是一个创建于 1492 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在我服务初始化的时候创建了 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 的时候 这个时候订阅又是正常的了.. 问一下 这是啥问题...

    3 条回复    2020-10-03 10:48:06 +08:00
    lewinlan
        1
    lewinlan  
       2020-03-16 23:42:18 +08:00 via Android
    redigo 的连接池他自己都没信心。换 go-redis 吧。
    BlackBerry999
        2
    BlackBerry999  
       2020-03-17 08:48:34 +08:00
    subConn.Subscribe(key) 放下面试试??
    wzw
        3
    wzw  
       2020-10-03 10:48:06 +08:00
    @lewinlan #1 redis golang 的话 直接选 go-redis 吗?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3364 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 12:18 · PVG 20:18 · LAX 05:18 · JFK 08:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.