美文网首页
Golang操作Redis

Golang操作Redis

作者: DevilRoshan | 来源:发表于2020-03-12 00:06 被阅读0次

    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

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