zoukankan      html  css  js  c++  java
  • go语言redis使用(redigo)

    通过一个例子来学习redigo的使用,其中主要使用到了redis的订阅与发布功能,以及redis连接池的实现

    redis操作:
    
      // tcp连接redis 
    
      rs, err := redis.Dial("tcp", host)
    
      // 操作完后自动关闭  
    
      defer rs.Close()
    
     // 操作redis时调用Do方法,第一个参数传入操作名称(字符串),然后根据不同操作传入key、value、数字等
     // 返回2个参数,第一个为操作标识,成功则为1,失败则为0;第二个为错误信息
     value, err := redis.String(rs.Do("GET", key))
     if err != nil {
        fmt.Println("fail")
     }
    
     若value的类型为int,则用redis.Int转换
    
     若value的类型为string,则用redis.String转换
    
     若value的类型为json,则用redis.Byte转换
    
     // 存json数据
     key := "aaa"
     imap := map[string]string{"key1": "111", "key2": "222"}
     // 将map转换成json数据
     value, _ := json.Marshal(imap)
     // 存入redis
     n, err := rs.Do("SETNX", key, value)
     if err != nil {
         fmt.Println(err)
     }
     if n == int64(1) {
         fmt.Println("success")
     }
    
    // 取json数据
    // 先声明imap用来装数据
    var imap map[string]string
    key := "aaa"
    // json数据在go中是[]byte类型,所以此处用redis.Bytes转换
    value, err := redis.Bytes(rs.Do("GET", key))
    if err != nil {
        fmt.Println(err)
    }
    // 将json解析成map类型
    errShal := json.Unmarshal(value, &imap)
    if errShal != nil {
        fmt.Println(err)
    }
    fmt.Println(imap["key1"])
    fmt.Println(imap["key2"])




    订阅发布功能测试

    package models

    import (
        "github.com/garyburd/redigo/redis"
        "github.com/astaxie/beego"
        "time"
        "fmt"
    )

    var (
        //定义常亮
        RedisClient *redis.Pool
        REDIS_HOST string
        REDIS_PORT string
        REDIS_DB int
    )

    func init() {
        //从配置文件中获取redis的ip以及db
        REDIS_HOST = beego.AppConfig.String("redis_host")
        REDIS_PORT = beego.AppConfig.String("redis_port")
        REDIS_DB = beego.AppConfig.DefaultInt("redis_db", 0)
        // 建立连接池
        RedisClient = &redis.Pool{
            // 从配置文件获取maxidle以及maxactive,取不到则用后面的默认值
            MaxIdle:     beego.AppConfig.DefaultInt("redis_maxidle", 100),
            MaxActive:   beego.AppConfig.DefaultInt("redis_maxactive", 1024),
            IdleTimeout: 180 * time.Second,
            Dial: func() (redis.Conn, error) {
                c, err := redis.Dial("tcp", REDIS_HOST+":"+REDIS_PORT)
                if err != nil {
                    return nil, err
                }
                // 选择db
                //c.Do("SELECT", REDIS_DB)
                return c, nil
            },
        }
    }

    /**
     *redis订阅信息
     *
     */
    func Subscribe() {
        c := RedisClient.Get()
        psc := redis.PubSubConn{c}
        psc.Subscribe("redChatRoom")

        defer func() {
            c.Close()
            psc.Unsubscribe("redChatRoom")  //取消订阅
        } ()
        for {
            switch v := psc.Receive().(type) {
            case redis.Message:
                fmt.Printf("%s: messages: %s ", v.Channel, v.Data)
            case redis.Subscription:
                //fmt.Printf("%s: %s %d ", v.Channel, v.Kind, v.Count)
                continue
            case error:
                fmt.Println(v)
                return
            }
        }
    }

    /**
     *redis发布信息
     *
     */
    func Pubscribe(s string) {
        c := RedisClient.Get()
        defer c.Close()

        _, err := c.Do("PUBLISH", "redChatRoom", s)
        if err != nil {
            fmt.Println("pub err: ", err)
            return
        }
    }

    func test() {
        // 从池里获取连接
        rc := RedisClient.Get()
        // 用完后将连接放回连接池
        defer rc.Close()
        //rc.Do()
        //n, _ := rc.Do("EXPIRE", key, 24*3600)  
        //value, err := redis.String(rs.Do("GET", key))
        return
    }

  • 相关阅读:
    导入sql错误
    导入sql错误
    导入sql错误
    导入sql错误
    【翻译】ASP.NET Web API是什么?
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    python中pip安装、升级、升级指定的包
  • 原文地址:https://www.cnblogs.com/tangchuanyang/p/5985780.html
Copyright © 2011-2022 走看看