V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
seth19960929
V2EX  ›  问与答

应用应该选择长连接还是连接池?

  •  
  •   seth19960929 · 2020-11-20 15:28:38 +08:00 · 424 次点击
    这是一个创建于 1269 天前的主题,其中的信息可能已经有所发展或是发生改变。

    按我的理解是, 单线程应用使用长连接, 多线程使用连接池.


    以下是我代码的例子.

    单线程, 长连接

    func main() {
    
        rds := redis.NewClient({})
        defer rds.Close()
    
        for {
    
            rds.Set(context.Background(), "foo", "bar", time.Second*60*60)
    
            time.Sleep(1)
        }
    }
    

    单线程,连接池

    func main() {
    
        pool := &redigo.Pool{}
    
        for {
    
    
            for i := 0; i <= 30; i ++ {
    
                go func() {
    
                    rds := pool.Get()
                    rds.Do("Set", "foo", "bar", 60*60)
                    rds.Close()
                }()
            }
    
    
            time.Sleep(1)
        }
    }
    

    • 那么, 如果是在多线程使用长连接会有什么问题吗 (会不会产生长连接只有一个不够用,多个线程抢占资源)(我用的 redisgo 测试没问题,可能是它内部实现自动连接池)
    func main() {
    
        rds := redis.NewClient({})
        defer rds.Close()
    
        for {
    
    
            for i := 0; i <= 30; i ++ {
    
                go func() {
    
                    rds.Set(context.Background(), "foo", "bar", time.Second*60*60)
                }()
            }
    
    
            time.Sleep(1)
        }
    }
    
    
    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2922 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 00:04 · PVG 08:04 · LAX 17:04 · JFK 20:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.