今天在这里就简单的说一下golang中操作redis数据库
在这里需要用到golang中优秀的第三方包

开源库redigo的使用

github地址:
https://github.com/garyburd/redigo

获取的redigo包的命令(一般通过git来操作)

go get github.com/garyburd/redigo

链接redis

package main

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

func main(){
    //链接redis
    redisConn,err :=redis.Dial("tcp","127.0.0.1:6379")
    if err != nil{
        fmt.Println("连接失败:",err)
        return
    }
    defer redisConn.Close()
}

在这里tcp可以是"tcp4"、"tcp6"、"tcp"中的任意一个,分别表示TCP(IPv4-only),TCP(IPv6-only)或者TCP(IPv4,IPv6的任意一个)。127.0.0.1:6379是端口号,redis默认为6379.redis.Dial()返回的是一个redis.conn的指针.

读写

package main

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

func main() {
    redisConn, err := redis.Dial("tcp", "127.0.0.1:6379")
    if err != nil {
        fmt.Println("连接失败:", err)
        return
    }
    defer redisConn.Close()

    _, err = redisConn.Do("SET", "mykey", "hello,world")
    if err != nil {
        fmt.Println("redis set failed:", err)
    }

    data, err := redis.String(c.Do("GET", "mykey"))
    if err != nil {
        fmt.Println("redis get failed:", err)
    } else {
        fmt.Println("Get mykey:", data)
    }
}
输出:hello,world

在c.Do()函数里写入对应的redis操作指令就可以执行该指令。第21行加了一个redis.String()函数是因为执行get命令时返回的是一个[]uint8类型的数据,可以把他转化为string类型.

如果想设置过期时间,可以使用SET的附加参数:

_, err = redisConn.Do("SET", "mykey", "hello,world", "EX", "5")
    if err != nil {
        fmt.Println("redis set failed:", err)
    }

第一行是让他存活5秒,然后会delete掉

检测值是否存在

EXISTS key

judge, err := redis.Bool(c.Do("EXISTS", "mykey1"))
if err != nil {
    fmt.Println("error:", err)
} else {
    fmt.Println("exists or not:", judge)
}
输出:exists or not: false

删除

    _, err = redisConn.Do("DEL", "mykey")
    if err != nil {
        fmt.Println("redis delelte failed:", err)
    }

会找到键名为key的删除掉,如果没有,返回一个错误

读写json到redis

package main

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

func main() {
    redisConn, err := redis.Dial("tcp", "127.0.0.1:6379")
    if err != nil {
        fmt.Println("Connect to redis error", err)
        return
    }
    defer redisConn.Close()

    key := "user"
    //创建集合
    mymap := map[string]string{"userName": "hello", "passWord": "world"}
    //通过json包把json数据封装
    value, _ := json.Marshal(mymap)

    n, err := redisConn.Do("SETNX", key, value)
    if err != nil {
        fmt.Println(err)
    }
    if n == int64(1) {
        fmt.Println("success")
    }

    var mymapGet map[string]string

    valueGet, err := redis.Bytes(c.Do("GET", key))
    if err != nil {
        fmt.Println(err)
    }
    //解封装
    errShal := json.Unmarshal(valueGet, &mymapGet)
    if errShal != nil {
        fmt.Println(err)
    }
    fmt.Println(mymapGet["userName"])
    fmt.Println(mymapGet["passWord"])
}

开源库go-redis/redis的使用

**github地址:
https://github.com/go-redis/redis

获取的go-redis/redis包的命令(一般通过git来操作)

go get github.com/go-redis/redis

链接redis

client := redis.NewClient(&redis.Options{
        Addr:     "127.0.0.1:6379",
        Password: "", // no password set
        DB:       0,  // use default DB
    })

第一行产生的是一个redis.client指针
第四行默认使用的是redis的第一个数据库,redis默认是有16个数据库下标0~15

读写

err = client.Set("name", "孟家恒", 0).Err()
    if err != nil {
        panic(err)
    }
    val, err := client.Get("name").Result()
    if err != nil {
        panic(err)
    }
    fmt.Println("name", val)

    val2, err := client.Get("name").Result()
    if err == redis.Nil {
        fmt.Println("name does not exists")
    } else if err != nil {
        panic(err)
    } else {
        fmt.Println("key2", val2)
    }

    err = client.HSet("tmap", "1", "f1").Err()
    if err != nil {
        fmt.Printf("try hset map[tmap] field[1] error[%s]\n",err.Error())
    }
    
    kvMap := make(map[string]interface{})
    kvMap["3"] = "f3"
    kvMap["4"] = "f4"

    err = client.HMSet("tmap", kvMap).Err()
    if err != nil {
        fmt.Printf("try mset map[tmap] field[3] field[4] error[%s]\n",err.Error())
    }

go-redis包是把函数名定义成了redis操作指令的开头
例如:
第一行client.Set("name","孟家恒",0).Err(),就是设置key属性,
第20行就是设置哈希值

第一行的第三个参数是这个键存活的时间,默认0的话就是永久,如果想设置过期时间,如下第19行

package main

import (
    "fmt"
    "time"
    "github.com/go-redis/redis"
)

func main() {
    client := redis.NewClient(&redis.Options{
        Addr:     "127.0.0.1:6379",
        Password: "", // no password set
        DB:       0,  // use default DB
    })

    pong, err := client.Ping().Result()
    fmt.Println(pong, err)

    err = client.Set("name", "孟家恒", time.Second*10).Err()
    if err != nil {
        panic(err)
    }
}

注:如果想设置10秒不能直接写10,而应写time.Second*10

更多指令操作请参考菜鸟教程

https://www.runoob.com/redis/redis-tutorial.html

Last modification:April 17th, 2020 at 03:58 pm
如果觉得我的文章对你有用,请随意赞赏