GoLang使用Redis

作者: 陌若尘_c167 | 来源:发表于2019-11-21 15:57 被阅读0次

    1、Redis 优势
    性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s
    丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作

    2、安装Redis
    可前往官网:https://redis.io/,redis的安装、启动这里不多做介绍

    3、安装redigo开源库
    可使用命令行自动安装或者到github下载手动安装

    go get github.com/garyburd/redigo/redis
    

    github地址:
    https://github.com/garyburd/redigo

    4、redigo读写redis操作demo

    package main
    
    import (
        "encoding/json"
        "fmt"
        "time"
    
        "github.com/garyburd/redigo/redis"
    )
    
    func main() {
        // 连接redis
        c, err := redis.Dial("tcp", "192.168.151.158:12004")
        if err != nil {
            fmt.Println("Connect to redis error", err)
            return
        } else {
            fmt.Println("Connect to redis ok")
        }
        defer c.Close()
    
        // 密码鉴权
        _, err = c.Do("AUTH", "cqrm123151qaz2WSX")
        if err != nil {
            fmt.Println("auth failed:", err)
        } else {
            fmt.Println("auth ok:")
        }
    
        // 写入数据
        _, err = c.Do("SET", "gokey", "gokeyvalue")
        if err != nil {
            fmt.Println("redis set failed:", err)
        } else {
            fmt.Println("redis set ok")
        }
    
        // 读取数据
        value, err := redis.String(c.Do("GET", "gokey"))
        if err != nil {
            fmt.Println("redis get failed:", err)
        } else {
            fmt.Printf("Get gokey: %v \n", value)
        }
    
        // 删除key
        _, err = c.Do("DEL", "gokey")
        if err != nil {
            fmt.Println("redis delelte failed:", err)
        }
    
        // 读取数据
        value, err = redis.String(c.Do("GET", "gokey"))
        if err != nil {
            fmt.Println("redis get failed:", err)
        } else {
            fmt.Printf("Get gokey: %v \n", value)
        }
    
        // 组装JSON字符串
        key := "profile"
        imap := map[string]string{"username": "666", "phonenumber": "888"}
        jsonvalue, _ := json.Marshal(imap)
    
        // 写入JSON字符串
        n, err := c.Do("SETNX", key, jsonvalue)
        if err != nil {
            fmt.Println(err)
        }
        if n == int64(1) {
            fmt.Println("success")
        }
    
        // 读取JSON字符串
        var imapGet map[string]string
        valueGet, err := redis.Bytes(c.Do("GET", key))
        if err != nil {
            fmt.Println(err)
        }
    
        // 解析JSON
        errShal := json.Unmarshal(valueGet, &imapGet)
        if errShal != nil {
            fmt.Println(err)
        }
        fmt.Println(imapGet["username"])
        fmt.Println(imapGet["phonenumber"])
    
        // 设置过期时间为6秒
        ret, _ := c.Do("EXPIRE", key, 6)
        if ret == int64(1) {
            fmt.Println("success")
        }
    
        // 休眠8秒
        time.Sleep(8 * time.Second)
    
        // 判断key是否存在
        is_key_exit, err := redis.Bool(c.Do("EXISTS", key))
        if err != nil {
            fmt.Println("error:", err)
        } else {
            fmt.Printf("exists or not: %v \n", is_key_exit)
        }
    }
    

    欢迎关注【技术型项目经理】公众号。可获取软件行业动态、技术积累和项目管理理念文章分享。选择「考试经验」菜单「PMP」、「高项」(信息系统项目管理师)、「CISSP」、「GoLang」可获取学习资料。

    相关文章

      网友评论

        本文标题:GoLang使用Redis

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