获取go redis第三方库
安装git ,在已安装好的终端上输入
go get github.com/gomodule/redigo/redis
会下载好第三方库到,GOPATH路径下
使用Golang链接redis
package main
import (
"fmt"
"github.com/gomodule/redigo/redis" //引入redis包
)
func main() {
//通过go 向redis 写入数据和读取数据
//1.链接到redis
conn,err := redis.Dial("tcp","127.0.0.1:6379")
if err != nil {
fmt.Println("redis.Dial err= ",err)
return
}
fmt.Println("conn success ....",conn)
}
注意:需要先把redis服务器开启
Set/Get接口
通过Golang 添加和获取key-value
package main
import (
"fmt"
"github.com/gomodule/redigo/redis" //引入redis包
)
func main() {
//通过go 向redis 写入数据和读取数据
//1.链接到redis
conn,err := redis.Dial("tcp","127.0.0.1:6379")
if err != nil {
fmt.Println("redis.Dial err= ",err)
return
}
defer conn.Close() //关闭连接
//2.通过go 向redis写入数据 string [key -value]
_, err = conn.Do("Set","name","mary,Hello 2")
if err != nil {
fmt.Println("set err= ",err)
return
}
//因为返回r是 interface{}
//因为name对应的值是string ,因此我们需要转换
//redis.String() 转string类型
r, err := redis.String(conn.Do("Get","name"))
if err != nil {
fmt.Println("Get err= ",err)
return
}
fmt.Println("操作成功---",r)
}
操作Hash
通过Golang 对Redis操作Hash数据类型
func main() {
//通过go 向redis 写入数据和读取数据
//1.链接到redis
conn,err := redis.Dial("tcp","127.0.0.1:6379")
if err != nil {
fmt.Println("redis.Dial err= ",err)
return
}
defer conn.Close() //关闭连接
//2.通过go 向redis写入数据
_, err = conn.Do("HSet","user01","name","heyhey")
if err != nil {
fmt.Println("hset err= ",err)
return
}
_, err = conn.Do("HSet","user01","age",43)
if err != nil {
fmt.Println("hset err= ",err)
return
}
//因为返回r是 interface{}
//因为name对应的值是string ,因此我们需要转换
//redis.String() 转string类型
name, err := redis.String(conn.Do("HGet","user01","name"))
if err != nil {
fmt.Println("hGet err= ",err)
return
}
fmt.Println("姓名:",name)
age, err := redis.Int(conn.Do("HGet","user01","age"))
if err != nil {
fmt.Println("hGet err= ",err)
return
}
fmt.Println("年龄:",age)
}
批量set/Get数据
通过Golang对Redis操作,一次操作可以set / Get多个key-val数据核心代码
//2.通过go 向redis写入数据
_, err = conn.Do("HMSet","user02","name","heyhey","age",45,"job","coder")
if err != nil {
fmt.Println("hmset err= ",err)
return
}
//3.获取值
user02, err := redis.Strings(conn.Do("HMGet","user02","name","age","job"))
if err != nil {
fmt.Println("hmGet err= ",err)
return
}
for i,v := range user02 {
fmt.Printf("user02[%d]=%s \n",i,v)
}
Redis链接池
说明:通过Golang对Redis操作,还可以通过Redis链接池,流程如下:
1) 事先初始化一定数量的链接,放入到链接池。
2) 当Go需要操作Redis时,直接从Redis链接池取出链接即可。
3) 这样可以节省临时获取Redis链接的时间,从而提高效率。
代码
package main
import (
"fmt"
"github.com/gomodule/redigo/redis" //引入redis包
)
//定义一个全局的pool
var pool *redis.Pool
//当启动程序时,就初始化连接池
func init() {
pool = &redis.Pool{
MaxIdle : 8 , //最大空闲连接数
MaxActive : 0 , //表示和数据库的最大连接数, 0 表示没有限制
IdleTimeout : 100, //最大空闲时间
Dial : func() (redis.Conn ,error){
return redis.Dial("tcp","localhost:6379")
},
}
}
func main() {
//先从pool 去除一个连接
conn := pool.Get()
defer conn.Close() //关闭连接
//设置值
_,err := conn.Do("Set","name","tom")
if err != nil {
fmt.Println(" conn.Do error",err)
return
}
//取出
r,err := redis.String(conn.Do("Get","name"))
if err != nil {
fmt.Println(" conn.Do error",err)
return
}
fmt.Println("r=",r)
//如果我们要从pool取出链接,一定保证链接池是没有关闭
//pool.Close()
}