V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
SethShi
0.01D
V2EX  ›  问与答

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

  •  
  •   SethShi · Nov 20, 2020 · 684 views
    This topic created in 1989 days ago, the information mentioned may be changed or developed.

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


    以下是我代码的例子.

    单线程, 长连接

    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)
        }
    }
    
    
    No Comments Yet
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2357 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 01:42 · PVG 09:42 · LAX 18:42 · JFK 21:42
    ♥ Do have faith in what you're doing.