Go---golang操作Redis

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

}

你可能感兴趣的:(Go,golang)