redis连接:
go 连接redis主要使用conn.go文件中的连接函数, 一般使用Dial, DialURL 当然也有
NewConn 创建于redis的连接, 在应用程序使用完毕后必须调用连接的Close() 方法将连接关闭,否则,有可能出现连接池溢出的问题
1.Dail
dial定义
func Dial(network, address string, options ...DialOption) (Conn, error)
network网络协议, 一般指定tcp即可
address 为连接字符串 比如’127.0.0.1:6379’
默认情况下, 没有通过DailOption指定db, 则db默认为0
DialOption 为一些连接参数, 定义:
type DialOption struct {
f func(*dialOptions)
}
type dialOptions struct {
readTimeout time.Duration
writeTimeout time.Duration
dialer *net.Dialer
dial func(network, addr string) (net.Conn, error)
db int
password string
clientName string
useTLS bool
skipVerify bool
tlsConfig *tls.Config
}
func DialDatabase(db int) DialOption
DialOption 方法
连接db时候使用
func DialClientName(name string)DialOption
func DialConnectTimeout(d time.Duration) DialOption
func DialDatabase(db int)DialOption
func DialKeepAlive(d time.Duration) DialOption
func DialNetDial(dial func(network, addr string) (net.Conn, error)) DialOption
func DialPassword(password string) DialOption
func DialReadTimeout(d time.Duration) DialOption
func DialTLSConfig(c *tls.Config) DialOption
func DialTLSSkipVerify(skip bool)DialOption
func DialUseTLS(useTLS bool)DialOption
func DialWriteTimeout(d time.Duration) DialOption
设置示例:
setdb := redis.DialDatabase(12) // 设置db
setPasswd := redis.DialPassword("") // 设置redis连接密码
示例代码:
并验证默认db为0; 这里建立两个连接, 分别操作两个不同的db,验证db参数设置成功
func main() {
setdb := redis.DialDatabase(12)
setPasswd := redis.DialPassword("")
c1, err := redis.Dial("tcp", "127.0.0.1:6379", setdb, setPasswd)
if err != nil {
log.Fatalln(err)
}
defer c1.Close()
c2, err := redis.Dial("tcp", "127.0.0.1:6379")
if err != nil {
log.Fatalln(err)
}
defer c2.Close()
resset, err := redis.String(c1.Do("SET", "my_test", "redigo"))
if err != nil {
fmt.Println("set err")
} else {
fmt.Println(resset)
}
//获取value并转成字符串
account_balance, err := redis.String(c1.Do("GET", "my_test"))
if err != nil {
fmt.Println("err while getting:", err)
} else {
fmt.Println(account_balance)
}
c2_get, err := redis.String(c2.Do("GET", "my_test"))
if err != nil {
fmt.Println("err while getting:", err)
} else {
fmt.Println(c2_get)
}
}
输出:
OK
redigo
err while getting: redigo: nil returned
2.DailURL
DialURL使用Redis URI方案连接到给定URL的Redis服务器
例如:
c, err := redis.DialURL("redis://127.0.0.1:6379"")
if err != nil {
// handle connection error
}
defer c.Close()
并发性:
connection不支持并发操作,但支持一个connection调用send, flush, 另一个recive, 如果要使用并发,建议使用redis pool连接池进行, 从goroutine获取