美文网首页
go使用redis

go使用redis

作者: 岑吾 | 来源:发表于2021-09-17 23:25 被阅读0次

在go中可以使用github.com/go-redis/redis来操作Redis

一、安装

现在最新的版本是 v8

go get github.com/go-redis/redis/v8

二、导入包

import (
    "context"
    "github.com/go-redis/redis/v8"
)

三、连接Redis

使用初始化InitRedis来连接Redis数据库,输入的url参数为格式。如:redis://:123456@127.0.0.1:6379

  • redis://: 协议头,固定格式
  • :前面 :redis无用户,所以为空
  • 123456:redis密码
  • 127.0.0.1: redis ip
  • 6379: redis 端口
var client *redis.Client

// url为redis地址
func InitRedis(url string) (err error) {
    if strings.HasPrefix(url, "redis://") {
        url = url[8:]
    }

    var pwd string
    if c := strings.Index(url, "@"); c != -1 {
        pair := strings.SplitN(url[:c], ":", 2)
        if len(pair) > 1 {
            pwd = pair[1]
        }
        url = url[c+1:]
    }

    client = redis.NewClient(&redis.Options{
        Addr:     url,
        Password: pwd,
        DB:       0,
    })

    return
}

四、string字符串操作

    // 判断key是否存在
    _, err := client.Get(context.Background(), "zngw").Result()
    if err == redis.Nil {
        fmt.Println("key不存在")
    } else {
        fmt.Println("key存在")
    }

    // 设置string
    err = client.Set(context.Background(), "zngw", "hello", 0).Err()
    if err != nil {
        fmt.Println(err)
    }

    // 获取string
    val2, err := client.Get(context.Background(), "zngw").Result()
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println("读取 zngw :", val2)

    // 设置带超时时间的string
    set, err := client.SetNX(context.Background(), "guoke", "hello", 10*time.Second).Result()
    if set {
        fmt.Println("设置成功")
    } else {
        fmt.Println("设置失败")
    }

五、Hash操作

    // 设置Hash Key
    err = client.HSet(context.Background(), "key", "hash:key", "value").Err()
    if err != nil {
        fmt.Println(err)
    }

    // 获取Hash Key
    val1, err := client.HGet(context.Background(), "key", "hash:key").Result()
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println("读取 zngw :", val1)

    // 获取Key所有键值
    val2, err := client.HGetAll(context.Background(), "key").Result()
    if err != nil {
        fmt.Println(err)
    }

    for k, v := range val2 {
        fmt.Println("key:", k, "value:", v)
    }

六、批量处理

func batchSet() {
    pipeline := client.Pipeline()
    ctx := context.Background()
    for i := 0; i < 100; i++ {
        key := fmt.Sprintf("%d", i)
        pipeline.HSet(ctx, key, map[string]interface{}{key: key})
    }

    _, err := pipeline.Exec(ctx)
    if err != nil {
        panic(err)
    }
}

func batchGet() {
    pipeline := client.Pipeline()
    ctx := context.Background()
    result := make([]*redis.StringStringMapCmd, 0)
    for i := 0; i < 100; i++ {
        key := fmt.Sprintf("%d", i)
        result = append(result, pipeline.HGetAll(ctx, key))
    }

    _, _ = pipeline.Exec(ctx)
    for _, r := range result {
        v, err := r.Result()
        if err != nil {
            panic(err)
        }

        fmt.Println(v)
    }
}

相关文章

  • Go语言操作Redis

    Go语言操作Redis 在项目开发中redis的使用也比较频繁,本文介绍了Go语言中go-redis库的基本使用。...

  • Golang使用Redis

    go使用Redis 文档链接:https://godoc.org/github.com/go-redis/redis

  • go使用redis

    在go中可以使用github.com/go-redis/redis[https://github.com/go-r...

  • 22.Redis

    在项目开发中redis的使用也比较频繁,本文介绍了Go语言中go-redis库的基本使用。《Redis 实战》 R...

  • go-redis库的返回值

    github.com/go-redis/redis 是go语言中封装的最便利使用的redis客户端,但是它的使用会...

  • go-redis 发布/订阅

    go-redis 发布/订阅 最近golang 的项目开始使用redis 对于redis 真的是接触少,而且是go...

  • golang操作redis

    项目依赖地址go-redis https://github.com/go-redis/redis[https://...

  • 32.Go语言·Redis

    ReadME.md main01.go main02.go redis连接池.redis.go

  • go-redis 源码分析:连接池

    笔者最近在项目中基于 go-redis 实现 Redis 缓存优化性能。go-redis 是一个 Go 语言实现的...

  • go-redis使用

    一。连接,设值,取值,设置过期时间

网友评论

      本文标题:go使用redis

      本文链接:https://www.haomeiwen.com/subject/htxegltx.html