golang操作redis

安装redis

本文视频教程:https://www.bilibili.com/video/BV1zR4y1t7Wj?from=search&seid=16274857202889440267&spm_id_from=333.337.0.0

下载redis

这里在windows平台下测试

https://github.com/MicrosoftArchive/redis/releases

启动server

执行redis-server.exe

C:\Program Files\Redis>redis-server.exe
[12092] 10 Aug 13:29:08.616 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server.exe /path/to/redis.conf
                _._
           _.-``__ ''-._
      _.-``    `.  `_.  ''-._           Redis 3.0.504 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 12092
  `-._    `-._  `-./  _.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |           http://redis.io
  `-._    `-._`-.__.-'_.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |
  `-._    `-._`-.__.-'_.-'    _.-'
      `-._    `-.__.-'    _.-'
          `-._        _.-'
              `-.__.-'

[12092] 10 Aug 13:29:08.619 # Server started, Redis version 3.0.504
[12092] 10 Aug 13:29:08.619 * The server is now ready to accept connections on port 6379

客户端测试

执行redis-cli.exe

127.0.0.1:6379> set name duoke360
OK
127.0.0.1:6379> get name
"duoke360"
127.0.0.1:6379>

安装go-redis库

使用go get命令安装

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

初始化数据库连接

package main

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

// 声明一个全局的rdb变量
var rdb *redis.Client


// 初始化连接
func initClient() (err error) {
    rdb = redis.NewClient(&redis.Options{
        Addr:     "localhost:6379",
        Password: "", // no password set
        DB:       0,  // use default DB
    })

    ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
    defer cancel()
    _, err = rdb.Ping(ctx).Result()
    if err != nil {
        return err
    }
    return nil
}

func main() {
    initClient()

}

连接Redis哨兵模式

func initClient()(err error){
    rdb := redis.NewFailoverClient(&redis.FailoverOptions{
        MasterName:    "master",
        SentinelAddrs: []string{"x.x.x.x:26379", "xx.xx.xx.xx:26379", "xxx.xxx.xxx.xxx:26379"},
    })
    _, err = rdb.Ping().Result()
    if err != nil {
        return err
    }
    return nil
}

连接Redis集群模式

func initClient()(err error){
    rdb := redis.NewClusterClient(&redis.ClusterOptions{
        Addrs: []string{":7000", ":7001", ":7002", ":7003", ":7004", ":7005"},
    })
    _, err = rdb.Ping().Result()
    if err != nil {
        return err
    }
    return nil
}

字符串get、set

package main

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

// 声明一个全局的rdb变量
var rdb *redis.Client
var ctx context.Context
var cancel context.CancelFunc
// 初始化连接
func initClient() (err error) {
    rdb = redis.NewClient(&redis.Options{
        Addr:     "localhost:6379",
        Password: "", // no password set
        DB:       0,  // use default DB
    })

    ctx, cancel = context.WithTimeout(context.Background(), 5*time.Second)

    _, err = rdb.Ping(ctx).Result()
    if err != nil {
        return err
    }
    return nil
}

func testStringGetSet() {

    err := rdb.Set(ctx,"score", 100, 0).Err()
    if err != nil {
        fmt.Printf("set score failed, err:%v\n", err)
        return
    }

    val, err := rdb.Get(ctx,"score").Result()
    if err != nil {
        fmt.Printf("get score failed, err:%v\n", err)
        return
    }
    fmt.Println("score", val)

    val2, err := rdb.Get(ctx,"name").Result()
    if err == redis.Nil {
        fmt.Println("name does not exist")
    } else if err != nil {
        fmt.Printf("get name failed, err:%v\n", err)
        return
    } else {
        fmt.Println("name", val2)
    }
    defer cancel()
}

测试

func main() {
    initClient()
    testStringGetSet()
}

运行结果

score 100
name duoke360

zset示例

func testSet()  {
    zsetKey := "book_price"
    languages := []redis.Z{
        redis.Z{Score: 90.0, Member: "Golang"},
        redis.Z{Score: 98.0, Member: "Java"},
        redis.Z{Score: 95.0, Member: "Python"},
        redis.Z{Score: 97.0, Member: "JavaScript"},
        redis.Z{Score: 99.0, Member: "C/C++"},
    }
    // ZADD
    num, err := rdb.ZAdd(ctx,zsetKey, languages).Result()
    if err != nil {
        fmt.Printf("zadd failed, err:%v\n", err)
        return
    }
    fmt.Printf("zadd %d succ.\n", num)

    // 把Golang的分数加10
    newScore, err := rdb.ZIncrBy(ctx,zsetKey, 10.0, "Golang").Result()
    if err != nil {
        fmt.Printf("zincrby failed, err:%v\n", err)
        return
    }
    fmt.Printf("Golang's score is %f now.\n", newScore)

    // 取分数最高的3个
    ret, err := rdb.ZRevRangeWithScores(ctx,zsetKey, 0, 2).Result()
    if err != nil {
        fmt.Printf("zrevrange failed, err:%v\n", err)
        return
    }
    for _, z := range ret {
        fmt.Println(z.Member, z.Score)
    }

    // 取95~100分的
    op := redis.ZRangeBy{
        Min: "95",
        Max: "100",
    }
    ret, err = rdb.ZRangeByScoreWithScores(ctx,zsetKey, op).Result()
    if err != nil {
        fmt.Printf("zrangebyscore failed, err:%v\n", err)
        return
    }
    for _, z := range ret {
        fmt.Println(z.Member, z.Score)
    }
}

func main() {
    initClient()
    testStringGetSet()
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

多课网_老郭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值