Go--连接redis

发布时间 2023-04-23 16:28:17作者: 心恩惠动

直接看代码

package main

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

//先下载三方依赖包,以下两个都可以,这里使用的是第一个
//go get -u github.com/go-redis/redis
//go get -u github.com/garyburd/redigo/redis

func ConnRedis() {
    rd := redis.NewClient(&redis.Options{
        Addr:     "10.x.x.x:9736", //单机连接
        Password: "",                    //密码
        DB:       0,                     //数据库
    })

    //集群模式连接,相当于命令行的 -c 参数,有域名的话直接填域名
    /*rd := redis.NewClusterClient(&redis.ClusterOptions{
        Addrs: []string{"10.x.x.x:9736", "10.x.x.x:9736"},
    })/**/

    //哨兵模式连接
    /*rd := redis.NewFailoverClient(&redis.FailoverOptions{
        MasterName: "name",
        SentinelAddrs: []string{"10.x.x.x:9736","10.x.x.x:9736"},
    })/**/

    defer rd.Close() //记得关闭连接

    result, err := rd.Ping().Result()
    if err != nil {
        fmt.Println("ping err:", err)
        return
    }
    fmt.Println(result)

    //新建一个key-value,第三个参数为过期时间(0为不过期)
    err = rd.Set("k1", "v1", 3*time.Second).Err()
    if err != nil {
        fmt.Println("set err:", err)
        return
    }

    //获取key-value
    val, err := rd.Get("k1").Result()
    if err != nil {
        //如果返回的错误是key不存在
        if errors.Is(err, redis.Nil) { //go-redis 库提供了一个 redis.Nil 错误来表示 Key 不存在的错误,以此区别处理 redis.Nil 和其他不为 nil 的错误
            fmt.Println("key error:", nil)
            return
        }
        //其他错误
        fmt.Println(err)
        return
    } else { //打印value
        fmt.Println("k1 == ", val)
    }

    //程序等待5秒钟
    time.Sleep(5 * time.Second)

    v2, err := rd.Get("k1").Result()
    if err != nil {
        //如果返回的错误是key不存在
        if errors.Is(err, redis.Nil) {
            fmt.Println("key error:", nil)
            return
        }
        //其他错误
        fmt.Println(err)
        return
    } else {
        fmt.Println("k1 == ", v2)
    }
}

func main() {
    ConnRedis()
}