用go语言操作redis

用go语言操作redis

go语言使用redis需要去下载官方redis工具包

在go_path路径下执行: go get github.com/garyburd/redigo/redis
如果没安装git 你可以去后面那个链接下载一个zip包,然后解压到本地gopath路径下就可以了

gopath路径如果不知道就去看一下环境变量配置参数,一般都能看得到的

当然 也有关于redis的工具不止这一种,这里就不一一举例了,其实最重要的还是你对redis基础和命令的理解
redis官方文档地址: http://redisdoc.com/string/index.html

简单的例子

package main

import (
    "fmt"

    "github.com/garyburd/redigo/redis"
)

func string() {
    //通过go向redis 写入数据和读取数据
    //1. 链接到go
    conn, err := redis.Dial("tcp", "127.0.0.1:6379")
    if err != nil {
        fmt.Println("reis connect err=", err)
        return
    }
    defer conn.Close()
    //2. 通过go向redis写入数据 string[key-val]
    _, err = conn.Do("Set", "name", "tom猫")
    if err != nil {
        fmt.Printf("Set err=%v \n", err)
    }

    //3. 从redis读取数据

    r, err := redis.String(conn.Do("Get", "name"))
    if err != nil {
        fmt.Println("get err=", err)
        return
    }

    //name, ok := r.(string)
    fmt.Println("name:", r)
}

func main() {
    //其实都是操作命令  熟练使用redis的命令基本上就会了
    //fixme redis 文档地址:  http://redisdoc.com/string/index.html
    //string()
    //hash()
    //list()
    subscribe()
}
func subscribe() {
    c, err := redis.Dial("tcp", "127.0.0.1:6379")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer c.Close()

    psc := redis.PubSubConn{c}
    psc.Subscribe("redChatRoom")
    for {
        switch v := psc.Receive().(type) {
        case redis.Message:
            fmt.Printf("%s: message: %s\n", v.Channel, v.Data)
        case redis.Subscription:
            fmt.Printf("%s: %s %d\n", v.Channel, v.Kind, v.Count)
        case error:
            fmt.Println(v)
            return
        }
    }
}

func list() {
    //1.连接到redis数据库
    conn,err :=redis.Dial("tcp","127.0.0.1:6379")
    if err != nil{
        fmt.Println("redis连接失败,错误信息:",err)
        return
    }
    defer conn.Close()
    fmt.Println("redis连接成功")

    //_, err = conn.Do("LPush", "heroList", "songjiang", 23, "long", 29)
    //if err != nil {
    //  fmt.Println(err)
    //  return
    //}
    //fmt.Println("LPush success")


    //values, _ := redis.Values(conn.Do("lrange", "heroList", "0", "100"))
    str, err := redis.String(conn.Do("RPop", "heroList"))
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(str)
    //for _, v := range values {
    //  fmt.Println(v)
    //}

    // 或者
    //var v1 string
    //redis.Scan(values, &v1)
    //fmt.Println(v1)
}

func hash() {
    ////通过go向redis 写入数据和读取数据
    ////1. 链接到go
    //conn, err := redis.Dial("tcp", "127.0.0.1:6379")
    //if err != nil {
    //  fmt.Println("reis connect err=", err)
    //  return
    //}
    //fmt.Println("-----------")
    //
    //defer conn.Close()
    //2. 通过go向redis写入数据 string[key-val]
    //_, err = conn.Do("HSet", "user", "name", "john")
    //if err != nil {
    //  fmt.Printf("Set err=%v \n", err)
    //}
    //_, err = conn.Do("HSet", "user", "age", 18)
    //if err != nil {
    //  fmt.Printf("Set err=%v \n", err)
    //}
    //_, err = conn.Do("HSet", "user", "gender", "boy")
    //if err != nil {
    //  fmt.Printf("Set err=%v \n", err)
    //}
    //
    ////3. 从redis读取数据
    //
    //r, err := redis.String(conn.Do("HGet", "user", "name"))
    //if err != nil {
    //  fmt.Println("get err=", err)
    //  return
    //}
    //
    ////name, ok := r.(string)
    //fmt.Println("name:", r)

    /*
    批量操作
     */
    //1.连接到redis数据库
    con,err :=redis.Dial("tcp","127.0.0.1:6379")
    if err != nil{
        fmt.Println("redis连接失败,错误信息:",err)
        return
    }
    defer con.Close()
    fmt.Println("redis连接成功")

    //2.通过go向redis写入数据
    _,err = con.Do("HMSet","user2","name","Bob大米","age","19")
    if err != nil{
        fmt.Println("hmset出错,错误信息:",err)
        return
    }

    fmt.Println("hmset ok")

    //3.通过go向redis读取数据
    reply,err := redis.Strings(con.Do("HMGet","user2","name","age"))
    if err != nil{
        fmt.Println("hmget出错,错误信息:",err)
        return
    }
    fmt.Println("hmget ok")

    for i,v := range reply{
        fmt.Printf("[%d]=%s\t",i,v)
    }

}

redis连接池的创建

package main

import (
    "fmt"
    
    "github.com/garyburd/redigo/redis"
)

var pool *redis.Pool
func init()  {
    pool = &redis.Pool{
        MaxIdle:8,// 最大空闲链接
        MaxActive: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", "hiram~")
    if err != nil {
        fmt.Println(err)
        return
    }

    r, err := redis.String(conn.Do("Get", "name"))
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(r)

}

猜你喜欢

转载自www.cnblogs.com/hirampeng/p/11220988.html