Golang操作Redis

Redis介绍

Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value[数据库],并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。

Redis支持的数据结构

Redis支持诸如字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、带范围查询的排序集合(sorted sets)、位图(bitmaps)、hyperloglogs、带半径查询和流的地理空间索引等数据结构(geospatial indexes)。

Redis应用场景

  • 缓存系统,减轻数据库压力,提升访问速度
  • 计数场景,比如微博、抖音中的关注数和粉丝数
  • 热门排行榜,需要排序的场景特别适合使用ZSET
  • 利用LIST可以实现队列的功能

Redis最常使用场景:缓存系统

Golang操作Redis

这里使用第三方库https://github.com/go-redis/redis连接Redis并进行操作。使用以下命令下载安装:

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

连接

这里分三种方式,普通单机节点连接,哨兵模式连接,集群连接


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

// 声明一个全局的reidsclient变量
var redisClient *redis.Client
//初始化连接
//普通连接
func initClient() (err error) {
    redisClient = redis.NewClient(&redis.Options{
        Addr:     "10.4.7.11:6379",
        Password: "", // no password set
        DB:       0,  // use default DB
    })

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

// 哨兵连接
func initClientSentinel()(err error){
    redisClient = redis.NewFailoverClient(&redis.FailoverOptions{
        MasterName:    "master",
        SentinelAddrs: []string{"x.x.x.x:26379", "xx.xx.xx.xx:26379", "xxx.xxx.xxx.xxx:26379"},
    })
    _, err = redisClient.Ping().Result()
    if err != nil {
        return err
    }
    return nil
}

// 集群连接
func initClientCluster()(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
}

set/get例子

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

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

    val2, err := redisClient.Get("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)
    }
}

func main() {
    err := initClient()
    if err !=nil {
        fmt.Printf("init redis client failed, err: %v", err)
    }
    redisExample()
}
score 100
name does not exist

你可能感兴趣的:(Golang操作Redis)