Go—golang操作Redis

  • Post author:
  • Post category:golang



获取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()


}



版权声明:本文为weixin_47328424原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。