问题描述
当用多个goroutine使用一个共享的 redis conn 时并发读写redis时,此时便会出现错误:
use of closed network connection- 或者
short write
错误原因
在使用同一个连接对redis进行写操作时,只能对一个hash表有一个写操作,不能同时多个写操作。有并发问题。
解决办法
解决并发问题最简单的就是加锁,但是还有更便利的方式:使用相关库提供的 连接池,如 redisgo:
var redisPool = & redis.Pool{
MaxIdle:30,
MaxActive:1000,
IdleTimeout: 30 * time.Second,
Dial: func() (conn redis.Conn, err error) {
return redis.Dial("tcp", "127.0.0.1:6379")
},
}
每次使用时都使用Get()方法从连接池获取连接,连接使用结束后使用Close()方法将连接返回给连接池。
conn := redisPool.Get()
defer conn.Close()












网友评论