海量用户——Redis连接池介绍和原理

package main

import “fmt”

/*
距离,存放一个商品信息
包括商品名、价格、生产日期
完成对应的crud操作

说明:通过Golang对Redis操作,还可以通过Redis连接池,流程如下:
1.实现初始化一定数量的连接,放入到连接池
2.当Go需要操作Redis时,直接从Redis连接池去除连接即可。
3.这样可以节省临时获取Redis连接的时间,从而提高效率。
4.示意图

Redis连接池
说明:通过Golang对Redis操作,还可以通过Redis连接池,流程如下:
1)事先初始化一定数量的连接,放入到连接池
2)当GO需要操作Redis时,直接从Redis连接池去除连接即可。
3)这样可以节省临时获取Redis连接的时间,从而提高效率。

核心代码:
var pool*redis.Pool
pool=&redis.Pool{
Maxldle:8,//最大空闲连接数
MaxActive:0,//表示和数据库的最大连接数,0表示没有限制
ldle Timeout:100,最大空闲时间
Dial:func()(redis.Conn,error){//初始化连接的代码,连接哪个ip的redis
return redis.Dial(“tcp”,“localhost6379”)
}
}
c:=pool.Get()//从连接池中取出一个连接
pool.Close()//关闭连接池,一旦关闭连接池,就不能从连接池取出连接。
*/
//定义一个全局的pool
var pool *redis.Pool
//当启动程序时,就初始化连接池
func init(){
pool=&redis.Pool{
MaxIdle:8,//最大空闲连接数
MaxActive:0,//表示和数据库的最大连接数,0表示没有限制
IdleTimeout:100,//最大空闲时间
Dial:func()(redis,Conn,error){//初始化连接的代码,连接哪个ip的redis
return redis.Dial(“tcp”,“localhost:6379”)

	},

}

}
func main(){
//先从pool取出一个连接
conn:=pool.Get()
defer conn.Close()

 _,err:=conn.Do("Set","name","汤姆猫")
 if err!=nil{
 	fmt.Println("conn.Do err=",err)
 	return
 }

 //如果我们要从POOL取出连接,一定保证连接池是没有关闭
 pool.Close()//关闭了
 conn2:=pool.Get()//再去取,取完后再去连接

 _,err=conn.Do("Set","name","汤姆猫")
 if err!=nil{
	 fmt.Println("conn.Do err=",err)
	 return
 }

 //取出
r,err:=redis.String (conn.Do("Get","name"))
if err!=nil{
	fmt.Println("conn.Do err=",err)
	return
}
fmt.Println("r=",r)
//如果我们要从POOL取出连接,一定保证连接池是没有关闭

fmt.Println("conn2=",conn2)

}

你可能感兴趣的:(项目练习)